2011-01-03 15 views
1

SqlServer 2008のプライマリキーがchar(2)で、これを1対多の関係で参照したいが、ManyToOneBuilder(ClassMap < > .References())にはCustomSqlType()メソッドがありません。具体的には:参照でCustomSqlTypeを設定する

public class State 
{ 
    // state FIPS code is 2 characters 
    public virtual string StateCode { get; set; } 
    public virtual ICollection<County> { get; set; } 
} 

public class County 
{ 
    // state-county FIPS code is 5 characters 
    public virtual string StateCountyCode { get; set; } 
    public virtual State State { get; set; } 
} 
public class StateMap : ClassMap<State> 
{ 
    public StateMap() 
    { 
     Id(e => e.StateCode).CustomSqlType("char(2)").GeneratedBy.Assigned(); 
    } 
} 

public class CountyMap : ClassMap<County> 
{ 
    public CountyMap() 
    { 
     Id(e => e.StateCountyCode).CustomSqlType("char(5)").GeneratedBy.Assigned(); 
     References(e => e.State, "StateCode") 
     // Here's what I want to do, but can't because the method is not 
     // implemented on the class ManyToOneBuilder: 
      .CustomSqlType("char(2)"); 
    } 
} 

ManyToOneBuilderを変更せずにこれを行う方法はありますか? FK(County.StateCode)を正しいタイプに自動的にマッピングする方法はありますか? ManyToOneBuilderにCustomSqlTypeを追加するのは簡単ですが、それは正しいことですか?

答えて

0

NHibernate自体がそれをサポートしていない場合、Fluent NHibernateはできません.Hibernateはあなたのシナリオをサポートしていません。テーブルに2列の複合キーがあり、フィールドの1つに、カスタムIUserTypeを持つ列挙型を使用してDBの適切なコード値に変換したいという点で同様の問題がありました。できませんでしたので、列挙型ではなく文字列型のプロパティを保持していました。あるよう

1

あなたの「状態」列定義が

.CustomSqlType("char(2)") 

と、この列を挿入=偽及び更新= falseを設定するために追加し、あなたのマッピング定義を保管してください。

私は同じ問題をしましたし、自動マッピングで、私はこのコードを使用します

mapping.Map(x => x.IdUniArticolo) 
    .CustomSqlType("varchar(50)") 
    .Not.Insert().Not.Update(); 

mapping.References(x => x.Articolo) 
    .Column("IdUniArticolo").PropertyRef("IdUniArticolo"); 
関連する問題