복합 키 Entity Framework 만들기
곧 SQL Server 검색 성능을 향상시키기 위해 기본 키와 함께 남은 테이블에 복합 키를 만들고 싶습니다. 기본 키 (즉, GUID 문자열)가없는 항목을 검색 할 때마다 200k 데이터 테이블에서 성능 문제가 발생합니다. 3 개의 수업이 있다고 가정합니다.
public class Device{
public int ID { get; set; }
public string UDID { get; set; }
public string ApplicationKey { get; set; }
public string PlatformKey { get; set; }
public ICollection<NotificationMessageDevice> DeviceMessages { get; set; }
}
public class NotificationMessageDevice {
[Column(Order = 0), Key, ForeignKey("NotificationMessage")]
public int NotificationMessage_ID { get; set; }
[Column(Order = 1), Key, ForeignKey("Device")]
public int Device_ID { get; set; }
public virtual Device Device { get; set; }
public virtual NotificationMessage NotificationMessage { get; set; }
}
public class NotificationMessage {
public int ID { get; set; }
public string Text { get; set; }
public DateTime CreateDate { get; set; }
}
modelBuilder.Entity<Device>().HasKey(t => new { t.ID, t.ApplicationKey, t.PlatformKey, t.UDID });
문제는 ID, UDID, ApplicationKey 및 PlatformKey를 modelBuilder와 함께 복합 키로 정의하려고 할 때마다 다음 오류가 발생한다는 것입니다.
NotificationMessageDevice_Device_Target_NotificationMessageDevice_Device_Source : : 관계 제약 조건에서 종속 역할과 주 역할의 속성 수가 동일해야합니다.
문제는 NotificationMessageDevice의 탐색 속성이 Device 테이블의 기본 키를 인식 할 수 없기 때문이라고 생각합니다. 이 문제를 어떻게 해결할 수 있습니까? 이 외에도 Entity 프레임 워크에서 검색 성능을 개선 한 경험을 공유해 주시면 기쁩니다. 일반적으로 기본 키없이 First 메서드를 사용할 때마다 성능 문제가 발생합니다.
Device 테이블에 복합 기본 키가있는 경우 NotificationMessageDevice 테이블 에 동일한 복합 외래 키가 필요 합니다. SQL은 전체 기본 키가없는 장치를 어떻게 찾을 수 있습니까? 또한 이러한 필드를 NotificationMessageDevice 테이블 기본 키의 일부로 만들어야 합니다. 그렇지 않으면 기본 키가 고유하다는 것을 보장 할 수 없습니다.
public class NotificationMessageDevice
{
[Column(Order = 0), Key, ForeignKey("NotificationMessage")]
public int NotificationMessage_ID { get; set; }
[Column(Order = 1), Key, ForeignKey("Device")]
public int Device_ID { get; set; }
[Column(Order = 2), Key, ForeignKey("Device")]
public string Device_UDID { get; set; }
[Column(Order = 3), Key, ForeignKey("Device")]
public string Device_ApplicationKey { get; set; }
public virtual Device Device { get; set; }
public virtual NotificationMessage NotificationMessage { get; set; }
}
ReferenceURL : https://stackoverflow.com/questions/14873169/creating-composite-key-entity-framework
'program tip' 카테고리의 다른 글
충돌 해결 병합 (0) | 2020.12.31 |
---|---|
Git merge --squash와 --no-commit의 차이점 (0) | 2020.12.31 |
Docker 명령 줄의 Docker 레지스트리에서 특정 태그가있는 Docker 이미지를 찾으려면 어떻게해야합니까? (0) | 2020.12.31 |
Bluebird로 Node의 child_process.exec 및 child_process.execFile 함수를 약속하는 방법은 무엇입니까? (0) | 2020.12.30 |
* ngFor에서 동적 ID를 설정하는 방법은 무엇입니까? (0) | 2020.12.30 |