NHibernate - 如何流畅地将基于 id 的属性映射为从域模型到数据库的一种方式
在我的应用程序实体内部由字符串键标识 - 其 ID 的 baseN 表示形式,例如 xAdWzC
这是数字 Id 的 BaseN (52) 表示形式。
数字 Id 是在插入之前使用类似于 oracle 序列算法生成的(我的自定义 id 生成器)。
如何映射我的类,该类基本上具有要保存在数据库中的 2 种 Id 表示形式,其中有两列,一列是数字 - 主键,另一列 - 字符串键以更好地标识数据库中的行?我显然不需要 2 个主键,并且更喜欢数字 PK。
字符串键只是一个围绕 C# 中的数字键的属性,如下所示
public string Key
{
get { return BaseNFunction(Id); }
}
基本上我希望此映射成为 db.key 的一种方式。当从数据库加载项目时,必须完全忽略此列。
NHB 映射会是什么样子? 这个问题是很难还是只是没有被发现?我认为它不值得赏金,但请帮助我。
Inside my app entity is identified by a string key - a baseN representation of its ID likexAdWzC
which is a BaseN (52) representation of numeric Id.
numeric Id is generated using similar to oracle sequence algorithm, before insertion ( my custom id generator).
How do I map my class that basicly has 2 representations of Id to be saved in db with 2 columns one numeric - primary key and the other - a string key to identify rows in db better? I obviously dont need 2 primary keys and would prefer numeric PK.
A string key is just a property that wraps around numeric key in C# like this
public string Key
{
get { return BaseNFunction(Id); }
}
Basicly I want this mapping to be one way to db. When item is loaded from db this column has to be completely ignored.
How would the NHB mapping look like?
Is the question difficult or its just wasn't spotted? I dont think its worth a bounty but please help me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需将生成的属性设置为只读(在 XML 中为
access="readonly"
;在 Fluent 中查找类似的内容)在这种情况下只读意味着从实体读取属性并将其写入数据库,但不是相反
Just make the generated property readonly (it's
access="readonly"
in XML; look for something similar in fluent)Read-only in this case means the property is read from the entity and written to the DB, but not the other way around
将数字键设为主键。这将自动给它一个唯一的约束和一个索引。然后使您的字符串键列只是一个明确具有唯一约束的常规列。如果您计划通过字符串进行查找,请不要忘记向字符串列添加索引。
Make your numeric key the primary key. This will automatically give it a unique constraint and an index. Then make your string key column just a regular column with a unique constraint explicitly. Don't forget to also add an index to the string column if you plan on doing lookups by it.