有两种型号,网站和链接,其中一个网站有许多环节,如何从网站的方法,不具有访问对象上下文中删除链接?
我已经试过类似:
public void DeleteFirstLink() {
var link = LinkSet.First();
LinkSet.Remove(link);
}
但似乎没有真正删除链接,但打破了关联。 因为有一个数据库约束它抛出这个错误:
的关系被添加或从AssociationSet“Sites_have_Links”删除。 用基数约束,一个相应的“链接”也必须被添加或删除。
实际上,我怎么从数据库中删除的链接?
假设你的ObjectContext的是不是还活着,当你调用DeleteFirstLink()方法,你可以把它通过转所述方法中的上下文,连接网站的实体,然后删除链接的工作:
public void DeleteFirstLink()
{
using (ProjectEntities db = new ProjectEntities())
{
db.AttachTo("[your site EntitySet name - SiteSet?]", this);
var link = LinkSet.First();
db.DeleteObject(link);
LinkSet.Remove(link);
db.SaveChanges();
}
}
没有对象上下文不能从数据库中删除任何东西。 一切行动都是排队对象上下文中的状态管理器,以及那些当你调用被保存到数据库ObjectContext.SaveChanges()
如果没有的SaveChanges,没有DB变化。
首先,这将是巨大的,如果你可以发布你的类结构提供更多的信息。 是否站点类有一个ObjectContext的对象? 然后,作为一个快速的解决方案,你可以将它传递到delete方法和使用context.DeleteObject()方法,并随后调用的SaveChanges。
然而,作为一个长期的解决方案,我仍然会推荐使用的UnitOfWork模式,我将张贴链接到文章再次解释它。 实施可能会有所不同,但通常可以解决大部分的你的问题(与此类似)。
这种方法的好处是,如果你使用正确的话,你可以建立一个小的框架,你可以在所有的EF项目的时候重新使用。
文章来源: How to delete an associated object in Entity Framework without having access to the object context