差分
ナビゲーションに移動
検索に移動
ページの作成:「Fluent NHibernateで複合主キーを記述する方法。 == エンティティ == 複合主キーを用いるエンティティクラスでは、とくに...」
[[Fluent NHibernate]]で[[複合主キー]]を記述する方法。
== エンティティ ==
複合主キーを用いるエンティティクラスでは、とくに何もしてなくてもEqualsメソッドとGetHashCodeメソッドをオーバーライドしておく必要がある。これをしないと実行時にエラーとなる。
<source lang="csharp">
public class NodeX
{
public virtual long Id1 { get; set; }
public virtual long Id2 { get; set; }
// これ重要
public override bool Equals(object obj)
{
return base.Equals(obj);
}
// これも重要
public override int GetHashCode()
{
return base.GetHashCode();
}
}
</source>
== マッピング ==
マッピングクラスではCompositeIdメソッドでマッピングを行う。
KeyPropertyメソッドで複合主キーにしたいカラムを次々と書いてくことで実現できる。
<source lang="csharp">
public class NodeXMap : ClassMap<NodeX>
{
public NodeXMap()
{
CompositeId()
.KeyProperty(x => x.Id1, "Id1")
.KeyProperty(x => x.Id2, "Id2")
;
}
}
</source>
== 関連項目 ==
* [[Fluent NHibernate]]
* [[Fluent NHibernate/フルーエントマッピング]]
== 参考文献 ==
<references/>
== 外部リンク ==
{{stub}}
== エンティティ ==
複合主キーを用いるエンティティクラスでは、とくに何もしてなくてもEqualsメソッドとGetHashCodeメソッドをオーバーライドしておく必要がある。これをしないと実行時にエラーとなる。
<source lang="csharp">
public class NodeX
{
public virtual long Id1 { get; set; }
public virtual long Id2 { get; set; }
// これ重要
public override bool Equals(object obj)
{
return base.Equals(obj);
}
// これも重要
public override int GetHashCode()
{
return base.GetHashCode();
}
}
</source>
== マッピング ==
マッピングクラスではCompositeIdメソッドでマッピングを行う。
KeyPropertyメソッドで複合主キーにしたいカラムを次々と書いてくことで実現できる。
<source lang="csharp">
public class NodeXMap : ClassMap<NodeX>
{
public NodeXMap()
{
CompositeId()
.KeyProperty(x => x.Id1, "Id1")
.KeyProperty(x => x.Id2, "Id2")
;
}
}
</source>
== 関連項目 ==
* [[Fluent NHibernate]]
* [[Fluent NHibernate/フルーエントマッピング]]
== 参考文献 ==
<references/>
== 外部リンク ==
{{stub}}