【问题标题】:Multiple UniqueKeys in Fluent NHibernateFluent NHibernate 中的多个 UniqueKeys
【发布时间】:2012-06-12 00:52:40
【问题描述】:

我有一个场景,我需要像这样定义两个多列唯一约束:

public class UserMap : IAutoMappingOverride<User>
{
    public void Override(AutoMapping<User> mapping)
    {
        mapping.Map(x => x.UserName)
               .UniqueKey("UQ_User_UserName_Client");
        mapping.Map(x => x.LoweredEmail)
               .UniqueKey("UQ_User_Email_Client");
        mapping.References(x => x.Client)
               .UniqueKey("UQ_User_UserName_Client")
               .UniqueKey("UQ_User_Email_Client");
    }
}

这样做的原因是我需要每个客户的用户名和电子邮件都是唯一的。生成的 SQL 如下所示:

create table Users (
   Id UNIQUEIDENTIFIER not null,
   UserName NVARCHAR(256) not null,
   LoweredEmail NVARCHAR(256) not null,
   Email NVARCHAR(256) not null,
   ClientId UNIQUEIDENTIFIER null,
   primary key (Id),
   unique (UserName),
   unique (LoweredEmail, ClientId)
)

这不是我们想要的效果。如何创建以下 SQL?

create table Users (
   Id UNIQUEIDENTIFIER not null,
   UserName NVARCHAR(256) not null,
   LoweredEmail NVARCHAR(256) not null,
   Email NVARCHAR(256) not null,
   ClientId UNIQUEIDENTIFIER null,
   primary key (Id),
   unique (UserName, ClientId),
   unique (LoweredEmail, ClientId)
)

我不确定这是否是 Fluent 或 NHibernate 的问题/限制。任何帮助将不胜感激。

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping sharp-architecture


    【解决方案1】:

    多次调用UniqueKey 会覆盖之前的值。

    改为使用逗号分隔的唯一键列表:

    mapping.Map(x => x.UserName)
           .UniqueKey("UQ_User_UserName_Client");
    mapping.Map(x => x.LoweredEmail)
           .UniqueKey("UQ_User_Email_Client");
    mapping.References(x => x.Client)
           .UniqueKey("UQ_User_UserName_Client, UQ_User_Email_Client")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2013-08-11
      • 2011-02-02
      • 2012-03-07
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多