8

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

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

4

3 回答 3

12

我发现答案是:

  public CustomerNewMap()
  {
        WithTable("customers_NEW");
        Not.LazyLoad();
        Id(x => x.Username).GeneratedBy.Assigned();
        Map(x => x.Company);
  }
于 2009-08-17T16:22:47.717 回答
5

这并没有直接回答这个问题..但它在评论中回答了这里接受的答案中的问题。

我们的 Ledger 上的 SQL 视图也有同样的问题。问题是当Id属性不是唯一的时,NHibernate 会很高兴地复制行。在我们的例子中.. 我们有将CustomerAccountId集合设置为Id.. 的 Ledger 条目,这在视图中不是唯一的。为了解决这个问题。我映射了一个 CompositeId,它基于我能找到的使该行独一无二的任何内容。在我们的例子中,它是CustomerAccountId和的组合WeekEnding

CompositeId()
    .KeyProperty(x => x.CustomerAccountId)
    .KeyProperty(x => x.WeekEnding);

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

于 2013-12-10T21:41:12.987 回答
0

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

  Id(x => x.Username).Column("Username").GeneratedBy.Assigned();
于 2010-08-31T18:59:32.143 回答