Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架v6中的TPC_C#_Entity Framework 6_Table Per Class - Fatal编程技术网

C# 实体框架v6中的TPC

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; }

我试图在实体框架中做一件非常简单的事情

我有一个产品,它有零个或多个参数,这些参数将映射到它们自己的表中。然而,我无法让它工作。我一直在尝试正确映射,然后使用迁移来查看数据库的外观。我知道这在NHibernate中是非常简单的,但我被迫违背我的意愿使用EntityFrameworkV6

背景 这些是我的实体:

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);