Fluent nhibernate 指定Fluent NHibernate自动映射以向所有实体添加唯一约束

Fluent nhibernate 指定Fluent NHibernate自动映射以向所有实体添加唯一约束,fluent-nhibernate,Fluent Nhibernate,我的自动映射: return Fluently.Configure() .Database(config) .Mappings(m => m.AutoMappings.Add( AutoMap.AssemblyOf<Company>()

我的自动映射:

 return Fluently.Configure()
                .Database(config)
                .Mappings(m =>
                          m.AutoMappings.Add(
                              AutoMap.AssemblyOf<Company>()
                                  .Where(
                                  t => t.Namespace == "DAL.DomainModel" && t.IsClass)
                                  .IgnoreBase<ReferenceEntity>()))
                .BuildSessionFactory();
流畅地返回。Configure()
.数据库(配置)
.Mappings(m=>
m、 自动映射。添加(
自动映射
.在哪里(
t=>t.Namespace==“DAL.DomainModel”和&t.IsClass)
.IgnoreBase())
.BuildSessionFactory();
所以ReferenceEntity是一个包含字符串名称的抽象类,我的所有引用实体都继承自该类。我想修改我的自动映射,为从ReferenceEntity继承的所有实体的名称字段添加唯一约束

我已经收集到它与设置有关,但我对如何继续有点迷茫


注意:我使用的是Fluent NHibernate v1.0 RTM,因此如果与我的目标相关,则新样式将采用约定。

如果您的所有实体都继承自ReferenceEntity,是否要为映射的所有实体的
Name
属性创建唯一约束

但如果您想按实体基类进行过滤,您可以这样做。使用约定向映射添加唯一约束:

public class NameConvention : IPropertyConvention
{
    public void Apply(IPropertyInstance instance)
    {
        // Check the entity base class type
        if (instance.EntityType.BaseType.Name == "ReferenceEntity")
        {
            // Only add constraint to the .Name property
            if (instance.Name == "Name")
            {
                instance.Unique();
            }
        }
    }
}
要获得FNH拾取的约定(以及组件中的所有其他约定),只需将这一行添加到上面的
AutoMap
设置中:

.Conventions.AddFromAssemblyOf<NameConvention>()
这将创建以下sql语句:

create table Users (
    Id INTEGER not null,
   Email TEXT not null,
   Name TEXT not null unique,
   primary key (Id)
)

create table Items (
    Id INTEGER not null,
   Description TEXT,
   Name TEXT not null unique,
   primary key (Id)
)

只要这些是独立的实体,它就会为每个实体的.Name属性创建一个唯一的约束

我的意思是,我有从ReferenceEntity继承的公司和从ReferenceEntity继承的端口。我希望将唯一约束分别应用于这些类。我不介意是否有一家公司与一个港口同名,只要所有港口都有唯一的名称,所有公司都有唯一的名称。这会改变你的答案吗?
create table Users (
    Id INTEGER not null,
   Email TEXT not null,
   Name TEXT not null unique,
   primary key (Id)
)

create table Items (
    Id INTEGER not null,
   Description TEXT,
   Name TEXT not null unique,
   primary key (Id)
)