代码之家  ›  专栏  ›  技术社区  ›  AwkwardCoder

表中无标识列

  •  4
  • AwkwardCoder  · 技术社区  · 15 年前

    对于没有标识列的表,如何使用fluent 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 回复  |  直到 9 年前
        1
  •  8
  •   BartoszKP    9 年前

    我发现答案是:

      public CustomerNewMap()
      {
            WithTable("customers_NEW");
            Not.LazyLoad();
            Id(x => x.Username).GeneratedBy.Assigned();
            Map(x => x.Company);
      }
    
        2
  •  2
  •   Simon Whitehead    11 年前

    这并不能直接回答问题。但它在评论中回答了这个问题。

    我们对分类帐的SQL视图也有同样的问题。问题是,当 Id 属性不唯一。在我们的例子中…我们的分类账分录 CustomerAccountId 设置为 身份证件 …这在视图中不是唯一的。 为了解决这个问题……我映射了一个基于我所能找到的使行唯一的任何内容的合成。在我们的案例中,它是 客户计数ID WeekEnding :

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

    这足以使NHibernate不重复地图。

        3
  •  0
  •   Christopher Stott    14 年前

    我发现在类似的情况下,我必须显式地设置列名。类似的东西

      Id(x => x.Username).Column("Username").GeneratedBy.Assigned();