2012-07-17 4 views
1

EF의 탐색 속성에 대한 부모 테이블참조 나는 기본적으로 FK의</p> <p>세 테이블이

  • 이 MakeName

모델

  • ModelId
  • 을 MakeId 확인
  • MODELNAME
  • MakeId (FK)

차량 I가 차량으로부터 탐색 속성하고자

  • VehicleId
  • DatePurchased
  • ModelId (FK) 데이터베이스 수정없이 만들기 0 는 I 시도 :

    public class Make 
    { 
        public int MakeId {get;set;} 
        <snip>...</snip> 
        public virtual Vehicle Vehicles {get;set;} 
    
    } 
    
    <snip>Model</snip> 
    
    public class Vehicle 
    { 
        public int VehicleId {get;set} 
        <snip>...</snip> 
        public virtual Make VehicleMake {get;set;} 
    } 
    
    
    public class VehicleMap : EntityTypeConfiguration<Vehicle> 
    { 
        public VehicleMap() 
        { 
         this.HasKey(t => t.VehicleId); 
         <snip>...</snip> 
         this.HasRequired(t => t.VehicleMake) 
         .WithMany(t => t.Vehicles) 
         .HasForeignKey(t => t.Model.MakeId); 
        } 
    
    } 
    

    를 I 이렇게 한 경우에는 I 예외 수신 :

    속성 식 'D가 => d.Model.MakeId'유효하지 않다. 식은 속성을 나타내야합니다. C# : 't => t.MyProperty' VB.Net : 'Function (t) t.MyProperty'. 속성을 여러 개 지정할 때 익명 형식을 사용합니다. C# : 't => new {t.MyProperty1, t.MyProperty2}'VB.Net : '함수 (t) {t.MyProperty1, .t.MyProperty2}의 새 함수 .

    내 데이터베이스에 Vehicle.ModelId 열을 추가하지 않고 내 만들기 & 차량 테이블에 탐색 속성을 만들 수있는 방법

    ?

답변

2

EF는 이러한 유형의 모델링을 지원하지 않습니다. 다음과 같이 Model.Make을 감싸는 속성을 만들 수 있습니다. 그러나 불필요한 지연로드가 발생할 수 있습니다.

public class Vehicle 
{ 
    public int VehicleId {get;set} 
    <snip>...</snip> 

    [NotMapped] 
    public virtual Make VehicleMake 
    { 
     get { return Model.Make; } 
     set { Model.Make = value; } 
    } 
} 
+0

괜찮 았지만이 점을 이해하지만 어떻게 Make.Vehicles를 올바르게 매핑 할 수 있습니까? –

+0

@ NathanKoop 같은 문제도 있습니다. 그것을 매핑 할 수 없습니다. 해결 방법은 데이터베이스를 쿼리하고 해당 속성이 필요할 때 수동으로 할당하는 것입니다. – Eranga

+0

노력해 주셔서 감사합니다. 추가 작업을하고 여기에 업데이트를 게시하겠습니다. –