3

2つのクラス(エンティティ)があり、除外と期間があり、期間の免除とIDからIdNumberで一意のインデックスを作成します。asp.net core 2つの列の制約を作成します。そのうち1つは別のエンティティです

流暢APIを使用して
 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を追加しましたが、移行

を追加するときにエラー

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

は、次のエラーを得てしまいました私はc.Period.Id

builder.Entity<Exemption>() 
        .HasIndex(c => new { c.IdNumber, c.Period.Id }).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 }'. 

は、私がどのようにPeriod.Id あたりIdNumberごとに1つだけ免除を許可する必要があり、次のエラー

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); 
関連する問題