6

EF 코드 첫 Fluent API에서 외래 키를 정의하는 방법에 대한 질문이 있습니다. 다음과 같은 시나리오가 있습니다.외부 키 엔터티 프레임 워크 코드 지정 먼저 Fluent API

두 가지 클래스 Person과 Car. 내 시나리오에서 Car는 Person 또는 Not (1 또는 0의 관계)를 할당 할 수 있습니다. 코드 : 내 샘플에서

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Car 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Person Person { get; set; } 
    public int? PPPPP { get; set; } 
} 

class TestContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } 
    public DbSet<Car> Cars { get; set; } 

    public TestContext(string connectionString) : base(connectionString) 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Car>() 
        .HasOptional(x => x.Person) 
        .WithMany() 
        .HasForeignKey(x => x.PPPPP) 
        .WillCascadeOnDelete(true); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

나는 PPPPP에 외래 키 PersonId의 이름을 변경합니다.

modelBuilder.Entity<Car>() 
      .HasOptional(x => x.Person) 
      .WithMany() 
      .HasForeignKey(x => x.PPPPP) 
      .WillCascadeOnDelete(true); 

을하지만 내 관계는 제로에 하나이며 나는 WithMany 방법을 사용하여 실수 할 두려워하지만, EF 적절한 매핑으로 데이터베이스를 생성하고, 모든 것이 잘 작동 : 내지도에서 나는 말한다.

내가 Fluent API 코드에 잘못되었거나 지금처럼 좋은 방법이 있다고 말하십시오.

도움 주셔서 감사합니다.

답변

3

여기에 유창한 API를 사용하는 데 문제가 없습니다. Person 클래스의 컬렉션 탐색 속성 (예 : Cars)을 사용하지 않으려면 WithMany 메서드를 사용하면됩니다.

+0

답변 주셔서 감사합니다. – patryko88

+0

Fluent API의 WithMany() 부분을 "일대일 (1 또는 0)"관계로 어떻게 만들 수 있습니까? @ patryko88 당신이 원하는대로 일하도록 코드를 얻었습니까? 그렇다면 답을 게시 할 수 있습니까? 감사! –

+0

@BrianBehm EF를 사용하면 공유 PK 매핑이있는 경우에만 일대일 관계의 양쪽에서 탐색 속성을 사용할 수 있습니다. collection 속성을 생략함으로써 관계는 like_look-one-to-one으로 보입니다. – Eranga