.net mvc3一对一

时间:2011-09-16 02:49:00

标签: asp.net asp.net-mvc-3 razor

我是.net mvc的新手。我正在尝试创建一个与另一个模型具有一对一关系的模型。

我希望能够在每个模型的编辑页面上显示关于其一对一关系的只读信息。

这是我的代码:

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表单上显示Thing2数据,但是如何在Thing2表单上显示Thing1数据?是否有一些东西可以添加到Thing2模型中以将其链接到thing1?

背景:我首先使用mvc3实体代码和razor。

1 个答案:

答案 0 :(得分:1)

最简单的做法可能是为Thing2添加一个新属性以实现关系,从而使其成为双向一对一关系

e.g。

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)(反之亦然),并且两个属性都将被设置。

如果没有这种设置(即将属性设置为只读,并使方便的方法同时设置两个属性),您可能会使对象彼此不同步 - 因此Thing1可能会引用Thing2没有Thing2引用Thing1。