2010-11-11 62 views
0

我使用實體框架4.
AttachTo dosen似乎沒有工作。對象總是空

var entity = rep.GetEntityTxt<AreaTypeText>(PKey, LangID); 

_db.AttachTo("AreaTypeText",entity); 
entity.Txt = "TEST"; 
_db.SaveChanges(); 

當我在調試模式下檢查的_db變量,我AreaTypeText對象爲null。似乎沒有附加。


UPDATE工作例
我需要分離到能夠將EntityState改變SaveChange之前修改。

var pluralizer = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en")); 
      TEntity entity = _db.CreateObjectSet<TEntity>().FirstOrDefault(p => p.ID == id && p.LangID == langid); 

      if (entity != null) 
      { 
       _db.Detach(entity); 
       entity.Txt = value; 
       _db.AddObject(pluralizer.Pluralize(entity.GetType().Name), entity); 
       _db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
       _db.SaveChanges(); 
+0

不了你'_db.AreaTypeText.Attach(實體)'?或'_db.AttachTo(「AreaTypeTexts」,entity)'(注意entity entity name的複數形式)。加上你的代碼沒有意義。你爲什麼要檢索一個實體,然後嘗試附加它?它已經是。 – RPM1984 2010-11-11 03:22:34

+0

您需要顯示*不*工作的代碼,而不僅僅是那部分。 – 2010-11-11 13:52:42

+1

好吧,我發現了這個問題。我需要從上下文中分離實體,以便能夠將狀態設置爲已修改。 – 2010-11-12 22:51:59

回答

1
var pluralizer = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en")); 
      TEntity entity = _db.CreateObjectSet<TEntity>().FirstOrDefault(p => p.ID == id && p.LangID == langid); 

      if (entity != null) 
      { 
       _db.Detach(entity); 
       entity.Txt = value; 
       _db.AddObject(pluralizer.Pluralize(entity.GetType().Name), entity); 
       _db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
       _db.SaveChanges();