Entity Framework 코드 첫 : 고객/주소 관계를 어떻게 모델링 할 수 있습니까?
다음은 간단한 모델입니다.public class Customer
{
public int ID { get; set; }
public int MailingAddressID { get; set; }
[ForeignKey("MailingAddressID")]
public Address MailingAddress { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
public class Address
{
public int ID { get; set; }
public int CustomerID { get; set; }
[ForeignKey("CustomerID")]
public Customer Customer { get; set; }
}
데이터베이스를 만들 때 다음 오류가 발생합니다.
Introducing FOREIGN KEY constraint 'Customer_MailingAddress' on table 'Customers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.
문제가 무엇인지 이해하지 못합니다. 본인은 주소가있는 고객을 삭제할 수 없으며 또한 고객의 우편 주소 인 주소도 삭제할 수 없다는 것을 알고 있습니다.
고객이 하나 이상의 주소를 가지고있는 경우 우편 주소 여야하며 그 주소는 삭제할 수 없기 때문에 이는 내 설계와 맞습니다.
그래서 내가 여기서 무엇을 놓치고 있습니까? 감사!
편집 :
OnModelBuilding 메서드에서 다음 줄을 추가했음을 잊어 버렸습니다.
modelBuilder.Entity<Customer>().Property(x => x.MailingAddressID).IsOptional();
이렇게하면 데이터베이스를 만들 수 있지만 고객을 추가 할 때 다음과 같은 오류가 발생했습니다 :
The INSERT statement conflicted with the FOREIGN KEY constraint "Customer_MailingAddress". The conflict occurred in database "DomainModel.SeasideHeightsEntities", table "dbo.Addresses", column 'ID'. The statement has been terminated.
여전히 제대로 모델링하는 방법에 관한 손실.
고객이 우편 주소를 가지고있는 한 삭제할 수 없어야합니다! 그것은 내가 FK 관계가 합리적이라고 생각하는 이유 중 하나입니다. 이것은 정상적인 데이터베이스 우선 EF 프로그램에서 정상적으로 작동합니다. 코드 우선 접근 방식으로 구현할 수있는 방법에 대한 제안 사항은 무엇입니까? 감사! –
나는 정중하게 의견이 맞지 않는다. 뭔가 관계를 소유해야합니다. 이 경우 고객이 도메인 집합체 인 것처럼 보이므로 메일 주소를 관리해야합니다. – Paul
나는 그 말이 이치에 맞는지 알 수 있습니다. 이 경우 CTP 유창한 API를 통해 고객을 삭제할 때 연결된 메일 주소 (또는 "소유"한 다른 항목)도 삭제해야한다고 지정할 수 있습니까? –