[英]Exception deleting using Entity Framework (C#)
我對一些簡單的代碼有疑問,我正在重構一些現有的代碼,從LINQ到SQL再到實體框架。 我正在測試保存和刪除,刪除確實困擾着我:
[TestMethod]
public void TestSaveDelete()
{
ObjectFactory.Initialize(x =>
{
x.For<IArticleCommentRepository>().Use<ArticleCommentRepository>();
});
PLArticleComment plac = new PLArticleComment();
plac.Created = DateTime.Now;
plac.Email = "myemail";
plac.Name = "myName";
plac.Text = "myText";
plac.Title = "myTitle";
IArticleCommentRepository acrep = ObjectFactory.GetInstance<IArticleCommentRepository>();
try
{
PortalLandEntities ple = new PortalLandEntities();
int count = ple.PLArticleComment.Count();
acrep.Save(plac);
Assert.AreEqual(ple.PLArticleComment.Count(), count + 1);
//PLArticleComment newPlac = ple.PLArticleComment.First(m => m.Id == plac.Id);
//ple.Attach(newPlac);
acrep.Delete(plac);
Assert.AreEqual(ple.PLArticleComment.Count(), count + 1);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
每次我嘗試運行此代碼時,都會在delete語句中得到一個異常,告訴我它不包含在當前的ObjectStateManager中。請注意,我的Save和Delete都看起來像這樣:
public void Delete(PLCore.Model.PLArticleComment comment)
{
using (PortalLandEntities ple = Connection.GetEntityConnection())
{
ple.DeleteObject(comment);
ple.SaveChanges();
}
}
public void Save(PLCore.Model.PLArticleComment comment)
{
using (PortalLandEntities ple = Connection.GetEntityConnection())
{
ple.AddToPLArticleComment(comment);
ple.SaveChanges();
}
}
和連接很重要:
public class Connection
{
public static PortalLandEntities GetEntityConnection()
{
return new PortalLandEntities();
}
}
關於我可以做些什么的任何想法?
您不能從一個ObjectContext
加載實體(在您的情況下, ObjectContext
是PortalLandEntities
的實例),然后再從另一個ObjectContext
刪除它,除非您將其與第一個分離,然后將其附加到第二個。 如果一次只使用一個ObjectContext
,您的生活將變得非常簡單。 如果無法做到這一點,則必須手動先分離然后再附加 ,同時始終跟蹤哪些實體連接到了哪個ObjectContext
。
如何在您的Connection
使用DI:使其變為非靜態。
public class Connection
{
private PortalLandEntities _entities;
public PortalLandEntities GetEntityConnection()
{
return _entities;
}
public Connection(PortalLandEntities entities)
{
this._entities = entities;
}
}
然后根據請求使用DI容器。 大多數人通過控制器工廠來執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.