1

それぞれがインターフェイスを実装する 2 つのクラスがあります。クラスの 1 つに、他のインターフェイスの ICollection が含まれています。

これをEFを使用してデータベースにマップしたいのですが、例外が発生します(以下)。これはどういうわけか可能であるはずですか?

クラス (製品とカテゴリ) のエンティティ定義:

public interface IProduct
{
    string ProductId { get; set; }
    string CategoryId { get; set; }
}

public interface ICategory
{
    string CategoryId { get; set; }
    ICollection<IProduct> Products  { get; set; };
}

public class ProductImpl : IProduct
{
    public string ProductId { get; set; }
    public string CategoryId { get; set; }
}

public class CategoryImpl : ICategory
{
    public string CategoryId { get; set; }
    public ICollection<IProduct> Products { get; set; }
}

CategoryImpl と ProductImpl の関係をマッピングしたいのでOnModelCreating、DbContext で次のメソッドを使用しています。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    var a = modelBuilder.Entity<CategoryImpl>();
    a.ToTable("Categories");
    a.HasKey(k => k.CategoryId);
    a.Property(p => p.CategoryId);
    a.HasMany(p => p.Products).WithOptional().HasForeignKey(p => p.CategoryId);

    var b = modelBuilder.Entity<ProductImpl>();
    b.ToTable("Products");
    b.HasKey(k => k.ProductId);
    b.Property(p => p.ProductId);
}

私が得る例外は以下の通りです。使用する具象型がIProductisであることをどうにかして指定することになっていますProductImplか?

    System.InvalidOperationException: The navigation property 'Products' 
is not a declared property on type 'CategoryImpl'. Verify that it has 
not been explicitly excluded from the model and that it is a valid navigation property.
4

1 に答える 1

0

EF のインターフェイスでそれを行うことはできません。プロパティをマッピングするには、ナビゲーション プロパティのタイプをマッピングする必要があります。また、タイプをマップするには、特に具体的なタイプである必要があります。

さまざまなタイプの製品とカテゴリが必要な場合は、代わりにそれらの基本クラスを使用できます。

public class ProductBase
{
    public string ProductId { get; set; }
    public string CategoryId { get; set; }
}

public class CategoryBase
{
    public string CategoryId { get; set; }
    public virtual ICollection<ProductBase> Products { get; set; }
}

public class DerivedProduct : ProductBase
{
}

public class DerivedCategory : CategoryBase
{
}
于 2012-09-20T00:36:05.200 に答える