如何为没有标识列的表指定流畅的NHibernate映射?
我想要这样的事情:
public sealed class CustomerNewMap : ClassMap<CustomerNew>, IMap
{
public CustomerNewMap()
{
WithTable("customers_NEW");
Not.LazyLoad();
Not.Id(); // this is invalid...
Map(x => x.Username);
Map(x => x.Company);
}
}
我的意思是没有在数据库中定义的主键(在数据库中没有太多定义)。
答案 0 :(得分:8)
我找到了答案:
public CustomerNewMap()
{
WithTable("customers_NEW");
Not.LazyLoad();
Id(x => x.Username).GeneratedBy.Assigned();
Map(x => x.Company);
}
答案 1 :(得分:2)
这并没有直接回答这个问题..但它在回答这里接受答案的问题时回答了问题。
我们在Ledger上遇到了与SQL View相同的问题。问题是当Id
属性不唯一时,NHibernate会很乐意复制行。在我们的案例中..我们有Ledger条目,CustomerAccountId
设置为Id
..这在视图中不是唯一的。
为了解决这个问题......我映射了一个基于我能找到的任何使行唯一的CompositeId。在我们的例子中,它是CustomerAccountId
和WeekEnding
:
CompositeId()
.KeyProperty(x => x.CustomerAccountId)
.KeyProperty(x => x.WeekEnding);
这足以让NHibernate不重复映射。
答案 2 :(得分:0)
我发现我必须在类似的情况下明确设置列名。像
这样的东西 Id(x => x.Username).Column("Username").GeneratedBy.Assigned();