2011-09-16 24 views
0

新しい.net mvcです。私は他のモデルと1対1の関係を持つモデルを作成しようとしています。.net mvc3と1対1

私は、1対1の関係について各モデルの編集ページに読み取り専用情報を表示できるようにしたいと考えています。

public class Thing1 : BaseEntity 
{ 
    public virtual Thing2 thing2 { get; set; } 
    [Required(ErrorMessage = "This field is required.")] 
    public int Thing2ID { get; set; } 

    ... Other basic fields go here 
} 

public class Thing2 : BaseEntity 
{ 

    ...basic fields 
} 

基本的なフィールドはごく普通の非リレーショナルのフィールドに立つ:

は、ここに私のコードです。

このモデルでは、Thing1データをThing1フォームに表示するのは簡単ですが、Thing1データをThing2フォームに表示するにはどうすればよいですか?それをthing1にリンクするためにThing2モデルに追加するものはありますか?

背景:私はmvc3をエンティティコードと最初に使用しています。

答えて

1

おそらく最も簡単な方法は、このようにそれ双方向 1対1の関係

例えば作り、関係のためThing2に新しいプロパティを追加することです

public class Thing2 : BaseEntity 
{ 
    public virtual Thing2 Thing2 { get; set; } 
    ...basic fields 
} 

次に、Thing 1とThing 2が同期しないようにする必要があります。あなたが好きなこの何かを行うことができます:

public class Thing1 : BaseEntity 
{   
    private Thing2 thing2; 
    public virtual Thing2 Thing2 { get { return thing2; } }  

    public void SetThing2(Thing2 thing2) 
    { 
     this.thing2 = thing2; 
     thing2.SetThing1(this); 

    } 

} 

public class Thing2 : BaseEntity 
{ 
    private Thing1 thing1; 
    public virtual Thing1 Thing1 { get { return thing1; } }  

    public void SetThing1(Thing1 thing1) 
    { 
     this.thing1 = thing1; 
     thing1.SetThing2(this); 
    } 
} 

(言い訳タイプミスのが、あなたのアイデアを得る)

をそのように、あなたはThing1.SetThing2(myThing2)(およびその逆)に行くことができるとの両方の特性が設定されます。

そのような設定がない場合(プロパティを読み取り専用にして、両方のプロパティを同時に設定する便利な方法を使用すると)、オブジェクトが互いに同期しなくなる危険があります。 Thing2はThing1を参照していません。