我正在将之前的项目从使用普通的NHibernate hbm.xml映射转换为Fluent NHibernate.目前,我仍然坚持要实现这一目标的最后步骤之一.我为DefaultAutomappingConfiguration添加了一个派生类来修改我的ID命名约定.字符串"Id"附加到类名称:
public override bool IsId(FluentNHibernate.Member member)
{
return member.Name == member.DeclaringType.Name + "Id";
}
Run Code Online (Sandbox Code Playgroud)
这应该使"代理商"在名为"AgencyId"的字段中具有ID.相反,我收到此错误:
The entity 'ClassMap`1' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id).
{Name = "ClassMap`1" FullName = "FluentNHibernate.Mapping.ClassMap`1[[BackendDb.Model.Agency, BackendDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
Run Code Online (Sandbox Code Playgroud)
我在IsId函数上创建了一个断点,看看发生了什么:
{Property: Cache}
{Name = "ClassMap`1" FullName = "FluentNHibernate.Mapping.ClassMap`1[[BackendDb.Model.Agency, BackendDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
Run Code Online (Sandbox Code Playgroud)
这是什么?对象不是我创造的东西.每个其他对象都通过这个函数很好,而我实际想要映射的对象返回正确的值.
我的Session工厂看起来像这样:
var cfg = new MapConfig();
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(m => m.Server(@".\SqlExpress")
.Database("{some dbname}")
.TrustedConnection()))
.Mappings(m => …
Run Code Online (Sandbox Code Playgroud)