【发布时间】:2018-03-30 19:35:18
【问题描述】:
我正在制作代码优先实体框架数据库模型,并且正在与级联删除作斗争。有我的简单课程:
public class User {
[Key()]
public int Id {get; set;}
public string Name {get; set;}
public int CampaignId {get; set;}
[ForeignKey("CampaignId")]
public virtual Campaign Campaign {get; set;}
}
public class Campaign {
[Key()]
public int Id {get; set;}
public string Description {get; set;}
public virtual List<User> Users {get; set;}
public Campaign() {
Users = new List<User>();
}
}
基本思想是为每个用户分配一个广告系列。当我删除用户分配的活动时:
internal static void DeleteCampaign(Campaign campaignToDelete) {
using (var context = new DatabaseContext()) {
context.Entry(campaignToDelete).State = EntityState.Deleted;
context.SaveChanges();
}
}
分配给该广告系列的用户也会被删除。我想要的是不删除用户,而是将它们分配给第一个可用的活动,或者为空。出于某种原因,我不能这样做:
internal static void DeleteCampaign(Campaign campaignToDelete) {
using (var context = new DatabaseContext()) {
for (int i = 0; i < campaignToDelete.Users.Count; i++) {
campaignToDelete.Users[i].Campaign = context.Campaigns.ElementAt(0);
}
context.Entry(campaignToDelete).State = System.Data.Entity.EntityState.Deleted;
context.SaveChanges();
}
}
因为我收到错误:
An unhandled exception of type 'System.ObjectDisposedException' occurred in EntityFramework.dll
Additional information: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
那我该如何避免呢?
【问题讨论】:
-
你开启延迟加载了吗?
标签: c# entity-framework