首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Fluent Nhibernate的一个实体中的主键和复合键

使用Fluent Nhibernate的一个实体中的主键和复合键
EN

Stack Overflow用户
提问于 2012-01-23 14:00:43
回答 2查看 937关注 0票数 2

我的问题是:

域:我有以下实体:传感器,可以定位在位置。这是一种多到多的关系。我把它分成两个一对多的位置来聚集一个位置的传感器。中间实体是SensorPosition。

SensorPosition的映射如下:

代码语言:javascript
复制
 CompositeId().KeyReference(sp => sp.Sensor).KeyReference(sp => sp.Location);
        References(sp => sp.Sensor).ForeignKey().Not.Nullable();
        References(sp => sp.Location).ForeignKey().Not.Nullable();
        Component(sp => sp.Position, p =>
                                         {
                                             p.Map(pos => pos.X);
                                             p.Map(pos => pos.Y);
                                             p.Map(pos => pos.Z);
                                         });

我使用CompositeId()在一个位置强制执行一个传感器的约束。(同一传感器可以位于不同的位置,这是业务逻辑的扭曲)

我的问题是:我可以添加一个生成的主键 (Id)吗?我已经尝试过了,但是在映射中使用CompositeId()不会生成它。或者是否有其他方法来强制执行此约束--流畅地使用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-23 14:14:41

我将避免使用复合主键。通过这种映射可以强制执行Uniquenes:

代码语言:javascript
复制
References(sp => sp.Sensor).UniqueKey("KeyName");
References(sp => sp.Location).UniqueKey("KeyName");

有关更多细节,请参见此问题

票数 1
EN

Stack Overflow用户

发布于 2012-01-23 14:16:06

要生成复合主密钥ID,需要在外键属性和复合Id中引用的每个实体之间建立一个双向关系。当创建SensorPosition实例时,将每个引用属性分配给组成密钥的适当实体,NHibernate将为SensorPosition键使用它们的Id值。

从长远来看,使用“代孕”键而不是NHibernate中的复合密钥键要简单得多(通常也是推荐的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8972808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档