2013-10-17 66 views
0

集合我有一個視圖模型包含兩個班...更新的類或視圖模型

public class vwbooking 
{ 
    public booking bookings { get; set; } 
    public IEnumerable<trace> traces { get; set; } 
} 

預訂和跟蹤是一個EDMX實體。

我想用一次保存來更新這兩個類中的數據。

這是我嘗試過,連同其他幾個不成功「的拍攝,在這黑暗的」變種...

public ActionResult Edit(vwbooking vwbooking) 
{ 
if (ModelState.IsValid) 
{ 
    DbEntityEntry<vwbooking> entry = db.Entry(vwbooking); 
    entry.Property(e => e.bookings.firstname).IsModified = true; 

    db.SaveChanges(); 
} 
} 

調用保存方法時,我得到了以下錯誤...

實體類型vwbooking不是當前上下文模型的一部分。

GET方法成功加載。這篇文章是我遇到麻煩的地方。這是GET方法...

public ActionResult Edit(int id = 0) 
    { 
     booking booking = db.bookings.Find(id); 
     var viewModel = new vwbooking(); 
     viewModel.bookings = booking; 
     viewModel.traces = (from l in db.traces where l.bookingid == booking.bookingid select l); 
     return View(viewModel); 
    } 

這是我的數據庫上下文類

public class salesContext : DbContext 
{ 
    public salesContext() : base() 
    { 
     Configuration.LazyLoadingEnabled = true; 
    } 

    public salesContext(string Connection) : base(Connection) 
    { 
     Configuration.LazyLoadingEnabled = true; 
    } 

    public DbSet<booking> bookings { get; set; } 
    public DbSet<trace> traces { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<booking>().HasKey(e => e.bookingid); 
     modelBuilder.Entity<trace>().HasKey(e => e.traceid); 
    } 
} 
+1

這是因爲vwbooking不是DbContext中的模型。它只是保存你的視圖的數據來顯示。您必須更新vwbooking屬性,因爲這些屬性會使您的模型成爲可能。 – jannagy02

+0

好的 - 我想我明白了,但我認爲那就是我正在做的事情?我應該做什麼不同? – tintyethan

+0

我在下面的答案 – jannagy02

回答

1

用於更新的代碼模型是:

db.Attach(vwbooking.bookings) 
db.ObjectStateManager.ChangeObjectState(vwbooking.bookings, System.Data.EntityState.Modified) 

vwbooking.traces.ToList().ForEach(
    t => 
    { 
    db.Attach(t); 
    db.ObjectStateManager.ChangeObjectState(t, System.Data.EntityState.Modified); 
    } 
); 

db.SaveChanges(); 

嘗試在編輯器的代碼

+0

中添加了更多詳細信息,這非常接近。預訂部分將更新。跟蹤部分正在拋出「值不能爲null.Parameter name:source」錯誤。我仍然試圖通過它。 – tintyethan

+0

我一直無法弄清楚。即使這會拋出相同的錯誤... vwbooking.traces.ToList()。ForEach(t => {Response.Write(「qwer」);}); – tintyethan

+0

我將根據您的反饋開始一個新線程。謝謝您的幫助。新線程是http://stackoverflow.com/questions/19432776/geeting-error-on-post-with-entity-framework-value-cannot-be-null-parameter-na – tintyethan