流畅的nHibernate表中没有标识列

Awk*_*der 5 identity fluent-nhibernate

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

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

Awk*_*der 9

我找到答案是:

  public CustomerNewMap()
  {
        WithTable("customers_NEW");
        Not.LazyLoad();
        Id(x => x.Username).GeneratedBy.Assigned();
        Map(x => x.Company);
  }
Run Code Online (Sandbox Code Playgroud)

  • 如果我尝试这个具有相同键的所有对象(在您的示例中为x.Username)实际上是从DB检索的第一个副本. (4认同)

Sim*_*ead 6

这并没有直接回答问题..但它回答了此处已接受答案的评论中的问题。

我们的 Ledger 上的 SQL 视图也有同样的问题。问题是,当Id属性不唯一时,NHibernate 会很乐意重复行。在我们的例子中..我们的分类帐条目的集合CustomerAccountIdId..,这在视图中并不唯一。为了解决这个问题......我映射了一个 CompositeId,它基于我能找到的使该行唯一的任何内容。CustomerAccountId在我们的例子中,它是和的组合WeekEnding

CompositeId()
    .KeyProperty(x => x.CustomerAccountId)
    .KeyProperty(x => x.WeekEnding);
Run Code Online (Sandbox Code Playgroud)

这足以让 NHibernate 不映射重复项。