我正在尝试在表User的列LoginName上设置唯一约束。所以以下是我的代码:
public FluentConfiguration GetNHConfig()
{
var cfg = new FreeflyingConfiguration();
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(_connStr))
.Mappings(m => m.AutoMappings
.Add(AutoMap.AssemblyOf<LogOfArticle>(cfg))
.Add(AutoMap.AssemblyOf<LogOfUser>(cfg))
// here is the problem, I think
.Add(AutoMap.AssemblyOf<User>(cfg).UseOverridesFromAssemblyOf<UserMappingOverride>())
.Add(AutoMap.AssemblyOf<Role>(cfg))
.Add(AutoMap.AssemblyOf<Profile>(cfg))
.Add(AutoMap.AssemblyOf<Blog>(cfg))
.Add(AutoMap.AssemblyOf<Comment>(cfg)));
}
public class UserMappingOverride : IAutoMappingOverride<User>
{
public void Override(AutoMapping<User> mapping)
{
// breakpoint is set here and can be hit every time
mapping.Map(x => x.LoginName).Not.Nullable();
mapping.Map(x => x.Email).Unique();
mapping.Map(x => x.Profile.BlogUrl).Unique();
}
}
可以生成表格,并且每次都可以点击“”行上的breakpiont。但是数据库没有变化,这意味着生成Unique约束,无论我使用的是UpdateSchema()还是BuildSchema()。
BTW,执行时没有错误。
因此找到原因更难。但欢迎提出任何建议!
答案 0 :(得分:0)
User
,Role
,Profile
等在不同的程序集中是否真的存在?如果不是,您只需要一个.Add(AutoMap.AssemblyOf<T>()
。这可能是您的问题,因为它可能会覆盖您在后续调用中的覆盖。我不是那么熟悉覆盖,但它值得一试。
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(_connStr))
.Mappings(m => m.AutoMappings
.Add(AutoMap.AssemblyOf<User>(cfg)
.UseOverridesFromAssemblyOf<UserMappingOverride>());