Entity framework 在实体框架中更新外键
我创建了一个实体的分部类,用于获取该实体的外键属性Entity framework 在实体框架中更新外键,entity-framework,foreign-keys,Entity Framework,Foreign Keys,我创建了一个实体的分部类,用于获取该实体的外键属性 public partial class Artikel { public int WarengruppenID { get { if (WarengruppeReference.EntityKey == null) return 0; return (int)WarengruppeReference.EntityKey.EntityKeyValue
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);
}
}
}
现在我更改了外键(属性),但什么也没发生
更新实体的外键需要做什么
我在ASP.NETMVC2中使用EF3.5SP1
编辑
id=ArtikelID
updatedArtikel=Artikel属性
ArtikelWarengruppen=选定的下拉列表值
[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();
}
}
我已经解决了这个问题
[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();
}
}
但是有更好的方法吗?这应该是实现您想要的最佳方法:
int artikelWarengruppenID = int.Parse(ArtikelWarengruppen);
updatedArtikel.WarengruppenID = artikelWarengruppenID;
updatedArtikel.ArtikelID = id;
_db.Entry(updatedArtikel).State = EntityState.Modified;
_db.SaveChanges();
这确实假设您发布的
Artikel
包含您希望保留在实体中的所有数据。您能否澄清,“现在我更改了外键(属性),但什么都没有发生?”如果您更改WarengruppenID=…
和ApplyPropertyChanges
的顺序会发生什么?它什么都没有发生,仍然是一样的,没有向数据库发送任何语句