2
我有以下功能NHibernate配置:主鍵慣例
var fluentConfig = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c
.FromConnectionStringWithKey("TestPortalDbContext"))
)
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<Program>()
.Conventions.AddFromAssemblyOf<PrimaryKeyConvention>()
.Conventions.Add<PrimaryKeyConvention>()
);
的問題是,PrimaryKeyConvention
不被使用。我配置不正確?
更新
我的一個映射(由NHibernate Mapping Generator生成)
public class TestResultMap : ClassMap<TestResult> {
public TestResultMap() {
Table("TestResults");
LazyLoad();
Id(x => x.Id).GeneratedBy.Identity().Column("Id");
References(x => x.TestSession).Column("SessionId");
References(x => x.Instruction).Column("InstructionId");
References(x => x.SolvedBy).Column("SolvedBy");
Map(x => x.State).Column("StateId").CustomType<TestState>();
Map(x => x.ActualResult).Column("ActualResult");
Map(x => x.CompletedAt).Column("CompletedAt");
Map(x => x.IsSolved).Not.Nullable().Column("IsSolved");
}
}
錯誤
我得到的錯誤是關鍵 「ClassName_id」 沒有被發現。
公約
public class PrimaryKeyConvention
: IIdConvention
{
public void Apply(IIdentityInstance instance)
{
instance.Column(instance.EntityType.Name + "Id");
}
}
查找相關實體
如果您使用的是正常映射(手動使用'ClassMap <>'),那麼慣例甚至會被使用嗎?我只使用約定的時候是我自動映射的時候。如果他們這樣做,那麼對我來說配置看起來不錯。 –
我已經添加了一個映射示例。 – jgauffin
我懷疑你的映射稍微偏離了一點,它看起來像你明確地給你的Id一個名爲'Id'的列,然後改變配置以嘗試尋找名爲'TestResultId'的東西。 –