【发布时间】:2011-01-16 21:15:36
【问题描述】:
我的表 Case 和我的另一个表 CaseReplies 之间存在一对多关系。我正在使用 EF Code First,现在想从 Case 对象中删除 CaseReply,但是这样做似乎是不可能的,因为它只是试图从特定的 CaseReply 记录中删除 CaseId 而不是记录本身..
我尝试在数据库级别设置级联删除/更新但运气不佳...
short:Case 只是删除了自身与 CaseReply 之间的关系。它不会删除 CaseReply。
我的代码:
// Case.cs(案例对象)
public class Case
{
[Key]
public int Id { get; set; }
public string Topic { get; set; }
public string Message { get; set; }
public DateTime Date { get; set; }
public Guid UserId { get; set; }
public virtual User User { get; set; }
public virtual ICollection<CaseReply> Replies { get; set; }
}
// CaseReply.cs (CaseReply 对象)
public class CaseReply
{
[Key]
public int Id { get; set; }
public string Message { get; set; }
public DateTime Date { get; set; }
public int CaseId { get; set; }
public Guid UserId { get; set; }
public virtual User User { get; set; }
public virtual Case Case { get; set; }
}
// RepositoryBase.cs
public class RepositoryBase<T> : IRepository<T> where T : class
{
public IDbContext Context { get; private set; }
public IDbSet<T> ObjectSet { get; private set; }
public RepositoryBase(IDbContext context)
{
Contract.Requires(context != null);
Context = context;
if (context != null)
{
ObjectSet = Context.CreateDbSet<T>();
if (ObjectSet == null)
{
throw new InvalidOperationException();
}
}
}
public IRepository<T> Remove(T entity)
{
ObjectSet.Remove(entity);
return this;
}
public IRepository<T> SaveChanges()
{
Context.SaveChanges();
return this;
}
}
// CaseRepository.cs
public class CaseRepository : RepositoryBase<Case>, ICaseRepository
{
public CaseRepository(IDbContext context)
: base(context)
{
Contract.Requires(context != null);
}
public bool RemoveCaseReplyFromCase(int caseId, int caseReplyId)
{
Case caseToRemoveReplyFrom = ObjectSet.Include(x => x.Replies).FirstOrDefault(x => x.Id == caseId);
var delete = caseToRemoveReplyFrom.Replies.FirstOrDefault(x => x.Id == caseReplyId);
caseToRemoveReplyFrom.Replies.Remove(delete);
return Context.SaveChanges() >= 1;
}
}
提前致谢。
【问题讨论】:
-
请发布您的对象模型,包括您可能拥有的任何流畅的 API 代码。
-
我已经用 CaseRepository 中使用的对象模型更新了帖子。
-
这是不可能的。由于需要您的关联,因此您应该会因为删除而获得异常。您确定 CaseReply 类上的 CaseId 类型是
int而不是int?吗? -
@Morteza Manavi - 正如我的帖子所说,它“工作” - 但不是我期望的那样......它应该从数据库中删除 CaseReply 对象,而不是特定 Case 和案例回复。
标签: c# entity-framework repository ef-code-first