2011-10-20 12 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によって生成された)私のマッピングの1つ

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" は発見されていないということです。関連するエンティティを検索するときは、PKに文句

大会

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")のような明示的setted値を上書きされることはありません。

関連する問題