EF4 CTP5 프로젝트에서 POCO 클래스를 사용하고 있으며 하위 속성을 삭제하는 데 문제가 있습니다. 여기에 내 예가있다. (너무 길지 않기를 바란다.) 여기 투어 클래스작업 단위 패턴을 사용하여 POCO에서 하위 항목을 삭제할 수 없습니다.
public partial class Tour
{
public Guid TourId { get; private set; }
protected virtual List<Agent> _agents { get; set; }
public void AddAgent(Agent agent)
{
_agents.Add(agent);
}
public void RemoveAgent(Guid agentId)
{
var a = Agents.Single(x => x.AgentId == agentId);
_agents.Remove(Agents.Single(x => x.AgentId == agentId));
}
}
명령 처리기
public class DeleteAgentCommandHandler : ICommandHandler<DeleteAgentCommand>
{
private readonly IRepository<Core.Domain.Tour> _repository;
private readonly IUnitOfWork _unitOfWork;
public DeleteAgentCommandHandler(
IRepository<Core.Domain.Tour> repository,
IUnitOfWork unitOfWork
)
{
_repository = repository;
_unitOfWork = unitOfWork;
}
public void Receive(DeleteAgentCommand command)
{
var tour = _repository.GetById(command.TourId);
tour.RemoveAgent(command.AgentId);
// The following line just ends up calling
// DbContext.SaveChanges(); on the current context.
_unitOfWork.Commit();
}
}
의
관련 부분은 내 UnitOfWork에이 DbContext.SaveChanges()
를 호출 할 때 얻을 오류 발생작업이 실패했습니다. 하나 이상의 외래 키 등록 정보가 null이 허용되지 않아 관계를 변경할 수 없습니다. 관계가 변경되면 관련 외래 키 등록 정보는 널 (NULL) 값으로 설정됩니다. 외부 키가 널값을 지원하지 않으면, 새 관계가 정의되어야하고, 외부 키 등록 정보에 널이 아닌 다른 값이 지정되어야합니다. 그렇지 않으면 관련이없는 오브젝트가 h 제되어야합니다. EF 못해 그냥 자동으로 나의 투어 클래스의 에이전트 모음에서 제거되었습니다해서 데이터베이스에서 에이전트 엔티티를 삭제하기 때문에
이이 일어나고있다.
명시 적으로 dbContext.Agents.DeleteObject(a);
을 호출해야하지만 내 문제는 내 POCO 내에서 dbContext에 액세스 할 수 없다는 것입니다.
이 시나리오를 처리하는 방법이 있습니까?
나는 올바른 길을 가고 있다고 생각합니다. EF가 컬렉션에서 에이전트 엔티티를 제거하려고 시도하지만 TourId 외래 키 값을 null로 설정할 수 없습니다 (예 : 에이전트에 TourId 외래 키가 있음). edmx에서 둘러보기 에이전트 연결을 어떻게 선언합니까? – kdawg
OnModelCreating의 Fluent API (4.1 codefirst)와 관계를 'modelBuilder.Entity() .HasRequired (p => p.Tour) .WithMany (t => t.Agents);와 같이 선언하고 있습니다. –
jessegavin