Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# EF6 Fluent Api-我需要在FluentApi中设置默认值,以便映射要使用的子级而不是父级_C#_Sql_Entity Framework_Default Value_Ef Fluent Api - Fatal编程技术网

C# EF6 Fluent Api-我需要在FluentApi中设置默认值,以便映射要使用的子级而不是父级

C# EF6 Fluent Api-我需要在FluentApi中设置默认值,以便映射要使用的子级而不是父级,c#,sql,entity-framework,default-value,ef-fluent-api,C#,Sql,Entity Framework,Default Value,Ef Fluent Api,这是设置的一部分。名称简化为: 我有以下课程: 我的班级 MySubclass1:MyClass MySubClass2:MyClass MyClass是另一个类(和表)的一部分,我将省略它 我正在尝试执行一个EF6查询(使用context.Set.Where(…)) 我希望返回子类而不是父类,并且我希望避免使用鉴别器。原因是:MyClass上有一个属性已经定义了它是MySubclass1还是MySubclass2。 该属性称为KindId,是查找表(Kinds)的FK EF零件正在自动生成

这是设置的一部分。名称简化为: 我有以下课程:

  • 我的班级
  • MySubclass1:MyClass
  • MySubClass2:MyClass
MyClass
是另一个类(和表)的一部分,我将省略它

我正在尝试执行一个EF6查询(使用
context.Set.Where(…)

我希望返回子类而不是父类,并且我希望避免使用
鉴别器
。原因是:MyClass上有一个属性已经定义了它是
MySubclass1
还是
MySubclass2
。 该属性称为
KindId
,是查找表(
Kinds
)的
FK

EF零件正在自动生成,如下所示:

public partial class MyClassMap : EntityTypeConfiguration<MyClass>
{
    public MyClassMap ()
    {
        ToTable("MyClasses", "MySchema");
        //...etc (other implementations)

        HasRequired(c=> c.Kind)
            .WithMany(kind => kind.MyClasses)
            .HasForeignKey(c => new { c.KindId });

        Initialize();
    }

    partial void Initialize();
}
public partial class MyClassMap 
{
    partial void Initialize()
    {
        Map<MySubclass1>(c => c.Requires("KindId").HasValue(1));
        Map<MySubclass2>(c => c.Requires("KindId").HasValue(2));
    }
}
公共部分类MyClassMap:EntityTypeConfiguration
{
公共MyClassMap()
{
ToTable(“MyClasses”、“MySchema”);
//…等(其他实现)
HasRequired(c=>c.Kind)
.WithMany(kind=>kind.myclass)
.HasForeignKey(c=>new{c.KindId});
初始化();
}
部分无效初始化();
}
这意味着,我只能更新Initialize()。 我的工作如下:

public partial class MyClassMap : EntityTypeConfiguration<MyClass>
{
    public MyClassMap ()
    {
        ToTable("MyClasses", "MySchema");
        //...etc (other implementations)

        HasRequired(c=> c.Kind)
            .WithMany(kind => kind.MyClasses)
            .HasForeignKey(c => new { c.KindId });

        Initialize();
    }

    partial void Initialize();
}
public partial class MyClassMap 
{
    partial void Initialize()
    {
        Map<MySubclass1>(c => c.Requires("KindId").HasValue(1));
        Map<MySubclass2>(c => c.Requires("KindId").HasValue(2));
    }
}
公共部分类MyClassMap
{
部分无效初始化()
{
Map(c=>c.Requires(“KindId”).HasValue(1));
Map(c=>c.Requires(“KindId”).HasValue(2));
}
}
当我运行EF查询时,我得到以下异常:

错误3023:映射从x:行开始的片段时出现问题 MyClass.KindId没有默认值,不可为空。列值 是存储实体数据所必需的

我尝试在DB上设置默认值,但我认为需要在EF中设置默认值。
问题是:如何使用FluentApi实现这一点?

您可能会遇到错误,因为它不知道基类使用什么鉴别器值。因此,我认为您还需要基类的映射——例如:

Map<MyClass>(c => c.Requires("KindId").HasValue(0));
Map(c=>c.Requires(“KindId”).HasValue(0));

谢谢您的回答。这是一个很好的建议。不幸的是,它将异常更改为以下内容:“MyClass类型已映射到表'MySchema.MyClasses'。在单个映射调用中指定表的所有映射方面。“我知道它已映射,只是不在当前映射中。”。有什么建议吗?啊,是的,
Map
还需要包含
c.ToTable(“MyClasses”,“MySchema”)
…但是如果你不能修改生成的配置……你是对的,很不幸生成了.ToTable:(@Recipe:你用什么生成代码?这是一个域建模工具(由框架人员定制编写)将(与T4模板一起)转换为c#