流畅的nHibernate表中没有标识列

时间:2009-08-17 13:52:40

标签: fluent-nhibernate identity

如何为没有标识列的表指定流畅的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);
    }
}

我的意思是没有在数据库中定义的主键(在数据库中没有太多定义)。

3 个答案:

答案 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。在我们的例子中,它是CustomerAccountIdWeekEnding

的组合
CompositeId()
    .KeyProperty(x => x.CustomerAccountId)
    .KeyProperty(x => x.WeekEnding);

这足以让NHibernate不重复映射。

答案 2 :(得分:0)

我发现我必须在类似的情况下明确设置列名。像

这样的东西
  Id(x => x.Username).Column("Username").GeneratedBy.Assigned();