3

중 하나는 두 개의 컬럼에 제약 조건을 만들고, 나는 기간asp.net 코어 I 2 개 클래스 (기관) 면제 및 기간이 다른 기업

에서 면제 ID와 IdNumber와 고유 인덱스를 만들고 싶어 마이그레이션을

,369를 추가 할 때
 public class Exemption 
     { 
      [Key] 
      public int Id { get; set; } 
      [Required] 
      public string FirstName { get; set; } 
      . 
      . 
      . 
      [Required] 
      public string IdNumber { get; set; } 
      [Required] 
      public Period Period { get; set; } 
     } 

    public class Period 
     { 
      [Key] 
      public int Id { get; set; } 
      . 
      . 
      . 
      [Required] 
      public string Year { get; set; } 

     } 

오류가 나는 OnModelCreating 내부 .HasIndex을 추가 유창함 API를 사용하지만, 가지고

builder.Entity<Exemption>().HasIndex(c => new { c.IdNumber, c.Period }).IsUnique(); 

다음과 같은 오류가 발생했습니다

The properties expression 'c => new <>f__AnonymousType5`2(IdNumber = c.IdNumber, Id = c.Period.Id)' is not valid. The expression should represent a property access: 't => t.MyProperty'. When specifying multiple properties use an anonymous type: 't => new { t.MyProperty1, t.MyProperty2 }'. 

내가 c.Period.Id

builder.Entity<Exemption>() 
        .HasIndex(c => new { c.IdNumber, c.Period.Id }).IsUnique(); 

을 추가하는 시도를 다음과 같은 오류 내가 어떻게 할 Period.Id 당 IdNumber 당 하나의 면제를 허용해야

The property 'Period' cannot be added to the entity type 'Exemption' because a navigation property with the same name already exists on entity type 'Exemption'. 

있어 나는 EF Core 1.0에서 그렇게합니까?

명시 적 외래 키 추가해야합니다

답변

2

: 다음

public class Exemption 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required] 
    public string FirstName { get; set; } 
    . 
    . 
    . 
    [Required] 
    public string IdNumber { get; set; } 
    [Required] 
    public int PeriodId { get; set; } 
    [ForeignKey("PeriodId")] 
    public Period Period { get; set; } 
} 

을 할 수 있습니다 인덱스 그것을 :

또한
builder.Entity<Exemption>().HasIndex(c => new { c.IdNumber, c.PeriodId }).IsUnique(); 

, 인덱스에 대한 fluent api code을 사용하고 있기 때문에, 당신이 유창하게 사용할 수 있습니다 다른 모든 주석도 마찬가지입니다. 예 :

builder.Entity<Exemption>() 
     .HasKey(c => c.Id) 
     .HasIndex(c => new { c.IdNumber, c.PeriodId }) 
     .IsUnique(); 

builder.Entity<Exemption>().Property(p => p.FirstName) 
     .IsRequired()   
     .HasMaxLength(100);