2010-01-19 175 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包含所有你想保持在该实体的数据。