Asp.net mvc 4 CodeFirst-更新单个属性

Asp.net mvc 4 CodeFirst-更新单个属性,asp.net-mvc-4,ef-code-first,entity-framework-5,Asp.net Mvc 4,Ef Code First,Entity Framework 5,我们正在构建一个MVC4应用程序,使用EF5,代码优先的方法。我们正在尝试更新实体上的1属性,但不断出现错误。下面是上下文创建的类的外观: public partial class Room { public Room() { this.Address = new HashSet<Address>(); } public int RoomID { get; set; } public Nullable<int> A

我们正在构建一个MVC4应用程序,使用EF5,代码优先的方法。我们正在尝试更新实体上的1属性,但不断出现错误。下面是上下文创建的类的外观:

public partial class Room
{
    public Room()
    {
        this.Address = new HashSet<Address>();
    }

    public int RoomID { get; set; }
    public Nullable<int> AddressID { get; set; }
    public Nullable<int> ProductVersionID { get; set; }
    public string PhoneNumber { get; set; }
    public string AltPhone { get; set; }
    public string RoomName { get; set; }
    public string Description { get; set; }
    public string Comments { get; set; }
    public string Notes { get; set; }

    public virtual ICollection<Address> Address { get; set; }
}
公共部分教室
{
公共房间()
{
this.Address=新的哈希集,但两者都没有解决我的问题


在此方面的任何帮助都将不胜感激!

经过数小时的挖掘,结果证明EF没有为我的DB表导入一些PK。我得到的消息是在Room课堂上,PK RoomID没有
[键]
属性。我试图通过edmx重新导入该表,但它从未作为键通过(即使它在DB中清楚地标记为PK)。因此,为了解决这个问题,我创建了DBContext的一个部分类,覆盖了
OnModelCreating
事件并包含了键,如下所示:

public partial class DBContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<Models.Room>().HasEntitySetName("Rooms");
        modelBuilder.Entity<Models.Room>().HasKey(r => r.RoomID);
    }
}
公共部分类DBContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
modelBuilder.Entity().HasEntitySetName(“房间”);
modelBuilder.Entity().HasKey(r=>r.RoomID);
}
}
完成此操作后,该操作按预期保存了记录


我希望这对其他人有所帮助!

我注意到您有两个绑定列表(房间和rm),它们的记录相同,但值不同。@DaveA rooms是整个房间列表,但rm是单个房间(从房间列表中))。我通常不会这样做,但如果可以的话,我试图将错误缩小到一个特定的语句。我理解你为什么这样做。但是如果在节省时间时可以/应该存在两个相同属性的绑定列表(在一种情况下,值冲突),我会感到怀疑
    [HttpPost]
    public virtual ActionResult UpdateRoom(RoomDetailsViewModel model)
    {
        var db = new DBContext();

        bool b = ModelState.IsValid;

        var rooms = db.Rooms;
        var rm = rooms.Where(r => r.RoomID == model.Room.RoomID).Single();
        //List<Address> address = db.Addresses.Where(a => a.AddressID == rm.AddressID).ToList<Address>();

        rm.ProductVersionID = model.PVersionID;
        //rm.Address = address;

        db.Entry(rm).Property(r => r.ProductVersionID).IsModified = true;

        //db.Entry(rm).State = System.Data.EntityState.Modified;

        db.SaveChanges();

        return View("RoomSaved", model);
    }
public partial class DBContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<Models.Room>().HasEntitySetName("Rooms");
        modelBuilder.Entity<Models.Room>().HasKey(r => r.RoomID);
    }
}