2011-10-20 60 views
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"); 
    } 
} 

查找相關實體

+0

如果您使用的是正常映射(手動使用'ClassMap <>'),那麼慣例甚至會被使用嗎?我只使用約定的時候是我自動映射的時候。如果他們這樣做,那麼對我來說配置看起來不錯。 –

+0

我已經添加了一個映射示例。 – jgauffin

+0

我懷疑你的映射稍微偏離了一點,它看起來像你明確地給你的Id一個名爲'Id'的列,然後改變配置以嘗試尋找名爲'TestResultId'的東西。 –

回答

0

約定也適用於fluentmappings,但從來沒有像重寫明確.Column("Id")值設置好的時候它抱怨的PK。