有没有办法避免Fluent NHibernate中的显式Id
映射?
我希望它以某种方式自动生成条目ID,这样我就不必将它作为类的一部分引入。
public class HeyMapping
{
public String Name { get; set; }
public DateTime Timestamp { get; set; }
}
public class HeyMapping : ClassMap<HeyMapping>
{
public HeyMapping()
{
Not.LazyLoad();
// I'm not particularly sure how this line works, but
// it fails the mapping unit test.
CompositeId().KeyProperty(x => x.Name);
Map(x => x.Name).Not.Nullable().Length(64);
Map(x => x.Timestamp).Not.Nullable();
}
}
答案 0 :(得分:2)
如果您想在实体中使用 无ID ,则仍需要映射ID,以便NHibernate知道要使用的数据库列。
你可以打电话
Id<TColumnDataType>("column_name");
请注意,您将放弃一些NHibernate功能(特别是级联更新和调用SaveOrUpdate()
的能力)并在数据库端产生性能损失,因为它具有仅限数据库的身份(我相信NHibernate将不得不进行额外的查询以进行比较)。
我通常会忽略这一点并允许Id
作为我的域类中的一个持久性问题,所以我会这样做:
public class HeyMapping
{
protected internal int Id { get; set; } // persistence concern
public virtual String Name { get; set; }
public virtual DateTime Timestamp { get; set; }
}
我意识到你可能不想这样做;我只是让你知道有一个权衡。
答案 1 :(得分:1)
创建一个基类,所有映射实体都从该基类继承,然后将Id属性添加到基类。