C# 实体框架v6中的TPC
我试图在实体框架中做一件非常简单的事情 我有一个产品,它有零个或多个参数,这些参数将映射到它们自己的表中。然而,我无法让它工作。我一直在尝试正确映射,然后使用迁移来查看数据库的外观。我知道这在NHibernate中是非常简单的,但我被迫违背我的意愿使用EntityFrameworkV6 背景 这些是我的实体:C# 实体框架v6中的TPC,c#,entity-framework-6,table-per-class,C#,Entity Framework 6,Table Per Class,我试图在实体框架中做一件非常简单的事情 我有一个产品,它有零个或多个参数,这些参数将映射到它们自己的表中。然而,我无法让它工作。我一直在尝试正确映射,然后使用迁移来查看数据库的外观。我知道这在NHibernate中是非常简单的,但我被迫违背我的意愿使用EntityFrameworkV6 背景 这些是我的实体: namespace Entities { public class EntityState { public int Id { get; set; }
namespace Entities
{
public class EntityState
{
public int Id { get; set; }
}
public class ProductState : EntityState
{
public virtual ICollection<ProductParameterState> Parameters { get; set; }
}
public abstract class ProductParameterState : EntityState
{
}
public class ColorParameterState : ProductParameterState
{
public virtual string Color { get; set; }
}
public class SizeParameterState : ProductParameterState
{
public virtual int Size { get; set; }
}
}
我不要这个。我可以通过删除产品
中的参数
属性来摆脱这个问题,但是我不能使用产品
的参数
我要求的太多了还是可能的?您可以使用TPC,但关系必须是双向的,并定义了显式FK(我猜这与错误消息中提到的“独立关联”相反)
将反向导航特性和FK特性添加到基础图元:
public abstract class ProductParameterState : EntityState
{
public int ProductId { get; set; }
public ProductState Product { get; set; }
}
并使用与第一次尝试相同的实体配置,除了ProductMap
中删除以下内容之外
HasMany(x => x.Parameters);
或者改成
HasMany(e => e.Parameters)
.WithRequired(e => e.Product)
.HasForeignKey(e => e.ProductId);
这很讨厌。我的域模型中不需要外键。但确实有效。谢谢
HasMany(x => x.Parameters);
HasMany(e => e.Parameters)
.WithRequired(e => e.Product)
.HasForeignKey(e => e.ProductId);