2017-10-07 1 views
0

SQL Server에 갖고 싶은 테이블의 모델 인 간단한 C# 클래스가 있습니다. 내가 마이그레이션을 만들 때Entity Framework에서 일대 다 관계가 필요한 동안 Int 필드를 만듭니다.

public class Device 
{ 
    public int Id { get; set; } 
    public DeviceType DeviceType { get; set; } 
    public IList<Device> ConnectedDevices { get; set; } 
} 

가 여기 엔티티 프레임 워크는이 테이블에 대해 생성하는 작업은 다음과 같습니다 : 여기에 클래스의

CreateTable(
     "dbo.Devices", 
     c => new 
      { 
       Id = c.Int(nullable: false, identity: true), 
       Device_Id = c.Int(), 
       DeviceType_Id = c.Int(), 
      }) 
     .PrimaryKey(t => t.Id) 
     .ForeignKey("dbo.Devices", t => t.Device_Id) 
     .ForeignKey("dbo.DeviceTypes", t => t.DeviceType_Id) 
     .Index(t => t.Device_Id) 
     .Index(t => t.DeviceType_Id); 

내가 이드 및 Device_Type_Id를 만들어 볼 -이 두 정상입니다. 그러나 Device_Id를 생성하고 싶은 이유는 Int입니까? 나는 그것을 필요로하지 않는다. 나는 one-to-many 관계를 원한다. (하나의 장치는 많은 장치의 마스터가 될 수있다.) 그렇다면 ConnectedDevices 속성이 제대로 반영되지 않는 이유는 무엇입니까?

// 편집 : 내가 더 생각할 때 실제로는 다 대다 관계를 가져야합니다. 모든 장치에는 제어 할 수있는 많은 장치가있을 수 있습니다. 그래서 EF는 나를 만족시키기위한 추가 테이블을 생성해야합니다. 왜 그렇게하지 않는지 나는 이해할 수 없다.

+0

이 링크를 보았지만 새 버전의 EF로 더 잘 처리 할 수 ​​있다고 생각했습니다. 다 대다를 많이 만들고 싶습니다. EF가이를 일대 다 (one-to-many)로 변환하는 이유는 무엇입니까? – Loreno

+0

다 대다를 원한다고 생각하는 이유는 무엇이라고 생각하십니까? 어떤 규칙을 기반으로합니까? 자체 참조 one-to-many는 또한 트리와 같은 데이터를 저장하는 데 자주 사용됩니다. –

+0

@IvanStoev 예를 들려 줄 수 있습니까? 나는 뭔가를 배우는 데 관심이 있습니다. Device 클래스 안에 IList 속성이 있으면 다른 장치에 바인딩 할 장치를 많이 갖고 싶다는 것이 확실합니다. 디바이스는 디바이스 타입이므로 다 대다가됩니다. – Loreno

답변

0

당신은 자식 장치를 가지고 있고 그 장치의 부모를 배우고 싶다. EF는이 ID를 사용하여 상위 장치에 액세스합니다.

편집 : 구성한 내용이 많지 않습니다. Ef는 상위 장치를 추적 할 수 없습니다. 이와 같은 장치를 정의해야합니다.

public class Device 
    { 
     public int Id { get; set; } 
     public DeviceType DeviceType { get; set; } 
     public IList<Device> InConnectedDevices { get; set; } 
     public IList<Device> OutConnectedDevices { get; set; } 
    } 

그런 다음 Fluent API로 구성하십시오. EF 코어를 사용하는 경우. 다른 해결책이 필요합니다.

관련 문제