0

와 역 특성을 해결할 수 :엔티티 프레임 워크 핵심은 심지어 내가 아주 최소한의 사용 사례에이 내려 삶은 한 주석

public class ItemRental 
{ 
    [Key] 
    public Int32 ItemRentalId { get; set; } 

    public Int32? OriginatingSalesOrderId { get; set; } 

    [ForeignKey("OriginatingSalesOrderId")] 
    public SalesOrder OriginatingSalesOrder { get; set; } 

    public Int32? DepositCreditedOnSalesOrderId { get; set; } 

    [ForeignKey("DepositCreditedOnSalesOrderId")] 
    public SalesOrder DepositCreditedOnSalesOrder { get; set; } 
} 

public class SalesOrder 
{ 

    [Key] 
    public Int32 SalesOrderId { get; set; } 

    [InverseProperty("OriginatingSalesOrder")] 
    public ICollection<ItemRental> Rentals { get; set; } 


    [InverseProperty("DepositCreditedOnSalesOrder")] 
    public ICollection<ItemRental> Refunds { get; set; } 
} 

public class MyAppDatabase : DbContext 
{ 
    public MyAppDatabase(DbContextOptions<MyAppDatabase> options) : base(options) 
    { 
    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(x => x.GetForeignKeys())) 
     { 
      relationship.DeleteBehavior = DeleteBehavior.Restrict; 
     } 
     base.OnModelCreating(modelBuilder); 
    } 

    public DbSet<ItemRental> ItemRentals { get; set; } 
    public DbSet<SalesOrder> SalesOrders { get; set; } 
} 

는 줄 것이다 마이그레이션을 실행하려고 :

시스템. InvalidOperationException : 'SalesOrder'유형의 탐색 속성 'ItemRental.OriginatingSalesOrder'가 나타내는 관계를 확인할 수 없습니다. 수동으로 관계를 구성하거나 '[NotMapped]'속성을 사용하거나 'OnModelCreating'에서 'EntityTypeBuilder.Ignore'를 사용하여이 속성을 무시하십시오.

이 관계는 EF 6.x에서 완벽하게 적용됩니다. Fluent API를 사용하여이 문제를 해결할 수 있다고 확신하지만 주석을 사용하여이 작업을 수행하는 방법을 이해하고 있습니다.

여기에서 비슷한 질문을 발견했습니다. EntityFramework core model relationship issue while doing Add-Migration 그러나이 문제는 해결되지 않습니다.

편집 : 여기 샘플 솔루션 : https://drive.google.com/file/d/0BzgvtZfXt8MHd1RseVJubmd6TEU/view?usp=sharing 데이터 주석 완벽하게 유효하기 때문에 여기에 이해하기 아무것도 없다

답변

4

.

문제의 원인은 더 간단합니다. 다음 2.1 릴리스에서 예정된 EFC 문제 추적 프로그램에서 #9180 Metadata: InverseProperty fails to resolve ambiguity while use KeyAttribute on PK 공개 문제로 추적되는 EF Core 2.0 (회귀) 버그.

그 때까지 링크에서 제안 된 해결 방법은 유창하게 API를 사용하는 것입니다,하지만 (이것은 운이 좋게 인식 PK 규칙의 하나 따르기 때문에) 당신이 SalesOrderSalesOrderId 속성에서 Key 속성을 제거하면 또한 작동 :

을 당신이 컬렉션을 탐색 특성에 InverseProperty 속성을 적용 할 경우
public class SalesOrder 
{  
    public Int32 SalesOrderId { get; set; }  
    // ... 
} 

나 :

public class ItemRental 
{ 
    // ... 
    [ForeignKey("OriginatingSalesOrderId")] 
    [InverseProperty("Rentals")] 
    public SalesOrder OriginatingSalesOrder { get; set; } 
    // ...  
    [ForeignKey("DepositCreditedOnSalesOrderId")] 
    [InverseProperty("Refunds")] 
    public SalesOrder DepositCreditedOnSalesOrder { get; set; } 
} 
+1

일했다! 와우, 나는 2.0의 모니 커가 아마도 제작에 사용될 수있을 것이라고 생각했지만 실제로 존재하는 것은 다른 냄비 구멍을 내가 두려워하게 만들었다. – sheamus