使用虚拟字段编辑模型

时间:2013-12-12 16:02:22

标签: asp.net asp.net-mvc

我有一个Shop模型,其中包含多个字段。其中一个是virtual User个。每当我尝试编辑一个条目时,我都会收到错误消息,指出需要User字段。

public class Shop
{
    //..
    public virtual ApplicationUser User { get; set; }
    //..
}

我的解决方法是:

        shop.User = shop.User; //re-set the value
        shop.Active = true;
        db.Entry(restaurant).State = EntityState.Modified;
        db.SaveChanges();

我必须为所有领域做到这一点。这是标准方法还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

将您的模型更改为:

public class Shop
{
    //..
    public int UserId {get; set; }
    public virtual ApplicationUser User { get; set; }
    //..
}

实体框架将自动检测UserId是对象User的外键。您遇到此问题是因为User是虚拟的(延迟加载)。在不访问或设置此属性的情况下更改模型时,EF认为它是空的(我假设)。外键UserId不是虚拟的,将与模型Shop的其他属性一起提取,因此您不必在保存模型时重新设置该值。

要设置新用户,您现在必须执行以下操作:

myShop.UserId = 1; // instead of setting myShop.User

有关详细信息,请参阅此文章:http://msdn.microsoft.com/en-us/data/jj713564.aspx