테이블 Case
과 다른 테이블 CaseReplies
사이에 일대 다 관계가 있습니다. 저는 EF Code First를 사용하고 있으며 이제는 Case 객체에서 CaseReply
을 삭제하려고합니다.하지만 CaseId를 특정 CaseReply 레코드에서 제거하려고 시도하기 때문에 불가능합니다.처음 EF 코드 + 부모 개체에서 자식 개체 삭제?
나는 행운없이 데이터베이스 수준에서 계단식 삭제/업데이트를 설정하려고 시도했습니다 ...
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에서 사용 된 개체 모델로 게시물을 업데이트했습니다. – ebb
이것은 불가능합니다. 협회가 필요하기 때문에 제거 결과로 예외를 받아야합니다. caseReply * 클래스의 * CaseId * 클래스가'int'가 아닌'int' 타입인지 확신합니까? –