小编cod*_*ion的帖子

流畅的NHibernate错误:实体'ClassMap`1'没有映射的Id

我正在将之前的项目从使用普通的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)

.net c# nhibernate fluent-nhibernate

4
推荐指数
1
解决办法
4590
查看次数

标签 统计

.net ×1

c# ×1

fluent-nhibernate ×1

nhibernate ×1