それぞれがインターフェイスを実装する 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);
}
私が得る例外は以下の通りです。使用する具象型がIProduct
isであることをどうにかして指定することになっています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.