通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体
Posted
技术标签:
【中文标题】通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体【英文标题】:Mapping a GUID property as Foreign Key to other entity by NHibernate mapping-by-code 【发布时间】:2014-12-07 23:31:21 【问题描述】:在 NHibernate 中使用按代码映射/符合标准的方法时,如何创建类映射以便将 Person.CountryId 创建为我的 Country 实体的外键?
在加载 Person 实体时,我确实不想直接在 person 实体中使用 Country 实体(因为它们是不同的聚合根)但仅通过 ID 引用它并且仍然具有 FK 关系在数据库中定义。
public class Person : Entity, IEntity
public Guid CountryId get; protected set;
public class Country : Entity, IEntity
public string Name get; protected set;
【问题讨论】:
【参考方案1】:如果一个聚合根有对另一个聚合根的引用,那很好。这个想法是不允许您引用其他聚合的部分。
你想做的事情并不容易。有人需要知道将哪个 Guid 放入 CountryId 列。如果您的应用程序无法回答这个问题,那么没有人可以。
您可能会尝试创建一个包含国家和人之间映射的类:
public class CountryToPersonMapping
public Guid Find(Person entity)
public void AddMapping(Person person, Country country)
然后找到一种方法将此类的实例传递给 NHibernate 中的自定义类型以设置正确的列。可能使用服务定位器。
【讨论】:
谢谢!在这种特殊情况下,我绑定到现有模型,因此我试图通过映射而不是在 NHibernate 的映射文件中使用以上是关于通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体的主要内容,如果未能解决你的问题,请参考以下文章
如何通过代码将 Id 映射到 NHibernate 映射中的私有支持字段?