2010-01-19 224 views
0

我已經創建了用於獲取外鍵屬性的實體的部分類。更新實體框架中的外鍵

public partial class Artikel 
{ 
    public int WarengruppenID 
    { 
     get 
     { 
      if (WarengruppeReference.EntityKey == null) return 0; 
      return (int)WarengruppeReference.EntityKey.EntityKeyValues[0].Value; 
     } 
     set 
     { 
      WarengruppeReference.EntityKey = 
       new EntityKey("ConsumerProtectionEntities.Warengruppe", "WarengruppenID", value); 

     } 
    } 
} 

現在我改變外鍵(屬性),但沒有任何反應?!

我需要做些什麼來更新實體的外鍵?

我使用EF 3.5 SP1在ASP.NET MVC 2

EDIT

ID = ArtikelID updatedArtikel = ARTIKEL性質 ArtikelWarengruppen =選定的DropDownList值

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, Artikel updatedArtikel, string ArtikelWarengruppen) 
{ 
    try 
    { 
     int artikelWarengruppenID = int.Parse(ArtikelWarengruppen); 

     var originalArtikel = (from art in _db.Artikel.Include(typeof(Warengruppe).Name) 
           where art.ArtikelID == id 
           select art).FirstOrDefault(); 

     _db.Attach(originalArtikel); 

     updatedArtikel.ArtikelID = id; 

     // Update FK 
     updatedArtikel.WarengruppenID = artikelWarengruppenID; 

     _db.ApplyPropertyChanges(typeof(Artikel).Name, updatedArtikel); 

     _db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 
+0

你能否澄清一下,「現在我改變外鍵(屬性),但沒有任何反應?」 – 2010-01-19 19:10:54

+0

...這裏是... – Rookian 2010-01-19 19:25:08

+0

如果你改變'WarengruppenID = ...'和'ApplyPropertyChanges'的順序會發生什麼? – 2010-01-19 20:30:44

回答

1

我已經解決了這個問題。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, Artikel updatedArtikel, string ArtikelWarengruppen) 
{ 
    try 
    { 
     // update foreign key 
     int artikelWarengruppenID = int.Parse(ArtikelWarengruppen); 

     var originalArtikel = (from art in _db.Artikel.Include(typeof(Warengruppe).Name) 
           where art.ArtikelID == id 
           select art).FirstOrDefault(); 

     originalArtikel.WarengruppenID = artikelWarengruppenID; 

     _db.Attach(originalArtikel); 

     // update properties 
     updatedArtikel.ArtikelID = id; 

     _db.ApplyPropertyChanges(typeof(Artikel).Name, updatedArtikel); 

     _db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

但是有沒有更好的方法?

0

這應該是達到你想要的東西的最佳方式:

int artikelWarengruppenID = int.Parse(ArtikelWarengruppen); 
updatedArtikel.WarengruppenID = artikelWarengruppenID; 
updatedArtikel.ArtikelID = id; 

_db.Entry(updatedArtikel).State = EntityState.Modified; 
_db.SaveChanges(); 

這並不假定您發佈Artikel包含所有你想保持在該實體的數據。