0
我試圖在表User的列LoginName上設置一個唯一的約束。因此,以下是我的代碼:爲什麼Override()不能在NHibernate Fluent中工作
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」。但是在數據庫中沒有任何變化,也就是說,無論使用UpdateSchema()還是BuildSchema(),都會生成Unique約束。
順便說一句,執行時沒有錯誤。
所以很難找到原因。但任何建議都是值得歡迎的!
所有實體都處於相同的組合中。但是我的代碼和我的代碼沒有區別? – freeflying
你有7'.Add(AutoMap.AssemblyOf()',我有1 –
是的,你說得對,但是爲什麼?它不是在Class上運行,而是在組裝上運行? – freeflying