2014-11-19 3 views
1

Entity2에서 FK 만 생성하려면 다음 관계를 어떻게 얻습니까?한 방향으로 FK와 일대일 관계

public class Entity1 
    { 
    public int Id { get; set; } 

    public virtual Entity2 Entity2 { get; set; } 
    } 

    public class Entity2 
    { 
    public int Id { get; set; } 

    public int? Entity1Id { get; set; } 

    public virtual Entity1 Entity1 { get; set; } 
    } 

내가 Entity1이 Entity2 (이 EF 게으른 부하 IT)에 대한 참조를 얻을 수있을 싶지만 Entity1이 DB에 Entity2에 FK를하고 싶지 않아요, 난 그냥 Entity2가 갖고 싶어 엔티티 1에 FK. 이것이 가능한가? 내 DB 컨텍스트에서 OnModelCreating에서 시도한 모든 것이 실제로 내가 원하는 것을 얻지 못합니다. 단지해야 하나 Entity1Id 열을 만드는 대신,

modelBuilder.Entity<Entity2>().HasOptional(e => e.Entity1).WithOptionalDependent(e => e.Entity2); 

그러나, 이것이 Entity1Id 열 및 Entity1에 Entity1_Id FK 컬럼으로 Entity2 테이블을 생성합니다 :

내가 얻을 수있는 가장 가까운이있다 엔티티 1에 FK.

또한 Entity1Id 속성은 Entity2 인스턴스/테이블 레코드가 Entity1에 대한 링크없이 독립적으로 존재해야하므로 Entity1Id 속성은 의도적으로 nullable int입니다.

+0

일대일 관계가 아닌 일대일 관계라면 왜 이것을 얻을 수 있습니까? – user1368182

답변

0

modelBuilder.Entity<Entity2>() 
.HasOptional(e => e.Entity1) 
.WithOptionalDependent(e => e.Entity2) 
.Map(m => { m.MapKey("Entity1Id"); }); 
(작동 아닌지 모르겠다) OnModelCreating의 코드를 제거하고 Entity2

public class Entity2 
{ 
public int Id { get; set; } 

[ForeignKey("Entity1")] 
public int? Entity1Id { get; set; } 

public virtual Entity1 Entity1 { get; set; } 

}

이 주석을 추가하거나 당신이 시도 할 수 있습니다

+0

감사! 그래서 나는 정말로 데이터 주석 접근법을 피하려고 노력했다. 그때 이것이 유일한 방법인가? – user1368182

+0

그것은 둘 중 하나의 솔루션을 좋아하지 않았습니다. 첫 번째 것은 (데이터 주석 경로) 다중성이 'Entity2_Entity1'관계에서 'Entity2_Entity1_Source'역할에 유효하지 않다고 말합니다. 종속 역할 속성은 주요 속성이 아니기 때문에 종속 역할의 다중 도의 상한선은 '*'이어야합니다. 다른 솔루션의 경우 각 속성 이름이 고유해야하며 Entity1Id가 이미 정의되어 있음을 나타내므로 해당 열을 두 번 만들려고하는 것 같습니다. – user1368182

+0

메모, modelBuilder.Entity () .HasOptional (e => e.Entity1) .WithMany(). HasForeignKey (e => e.Entity1Id); modelBuilder.Entity () .HasOptional (e => e.Entity1) .WithOptionalDependent (e => e.Entity2)와 같이 구성된 테이블에서 동일한 결과를 생성하는 것으로 보입니다. ... 그래서 나는 그들 사이의 진정한 차이점은 그들이 똑같은 것을 생산하는지 궁금해. – user1368182