Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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# 4.0 EF4.2和继承的类关联属性有几个问题_C# 4.0_Entity Framework 4.1_Ef Code First_Table Per Type - Fatal编程技术网

C# 4.0 EF4.2和继承的类关联属性有几个问题

C# 4.0 EF4.2和继承的类关联属性有几个问题,c#-4.0,entity-framework-4.1,ef-code-first,table-per-type,C# 4.0,Entity Framework 4.1,Ef Code First,Table Per Type,我对EF4.2和fluent api有几个问题,它们采用代码优先的设计方法,每个具体类型的基类属性继承表 1忽略基类属性的Fluent Api非基元属性导致EF错误 在我的基类属性上,fluent api中的ignore语句似乎没有得到正确处理 class BaseContentElement { public virtual BaseContentElemnt Parent {get; set;} public int Id {get;set;} ... } class ChapterE

我对EF4.2和fluent api有几个问题,它们采用代码优先的设计方法,每个具体类型的基类属性继承表

1忽略基类属性的Fluent Api非基元属性导致EF错误

在我的基类属性上,fluent api中的ignore语句似乎没有得到正确处理

class BaseContentElement {

public virtual BaseContentElemnt Parent {get; set;}

public int Id {get;set;}
...
}

class ChapterElement : BaseContentElement {

public virtual CourseElement Course { 
    get { return base.Parent as CourseElement; } set {base.Parent = value; } 
}

...

}
在fluentapi中,语句

var config = new EntityTypeConfiguration<ChapterElement>();

config.Map(m =>
{
    m.MapInheritedProperties();
    m.ToTable("Chapter", Schema);
});

config.HasKet( ch => ch.Id );
config.Ignore( ch => ch.Parent );

在我的应用程序中,我在内存中保留了一个查找表,其中包含所有查找表值。该应用程序使用enum eAnimationDirection,数据库使用Animedition属性进行更新。在将记录添加到DBContext之前,我将查找值附加到上下文DBContext.AnimationDirections.attach。。。对于查找表中的每个项

将实体添加到DB时,AnimationDirection表(查找表)上出现重复插入错误

但是,如果我将属性AnimeDIrection和animedirectionnum移动到子类TextListItemElement,则操作会成功,不会出错。。。我还有另外3个子类,它们也共享属性。实际上,我共享的基类上有两个查找属性,因此不建议将属性移动到子类


这可能是EF 4.2中的一个错误,也可能是因为我的基类是抽象的。Microsoft在基类抽象类方面的历史记录不好。…

这两个问题完全不相关,因此不应该一起问。第二个问题应与代码示例一起单独提问,说明如何附加/添加实体,因为问题的重要部分缺失,并且您的描述确实不清楚-真正的可复制代码确实如此


第一个问题的答案是:这是不可能的。一旦基类的任何部分被映射,您就不能在派生类中忽略它。派生类必须包含在基类中映射的所有属性

很抱歉,我重新编辑了邮件,删除了第二个问题。不知道为什么它没有被删除。。。我点击编辑,删除了第二个问题,然后重新发布<我想谢谢你的回答。可能是EF核心如何确定DB映射的限制。我收到的错误相当误导,表明Id未映射或被忽略,但事实上它是我的另一个未映射属性。我不喜欢用特定于数据或特定于演示文稿的知识来演示我的业务实体—查看数据传输对象设计模式—我指的是MVC验证属性。关于序列化xml和二进制支持的唯一属性。谢谢你的时间和耐心
public abstract class BaseListItemElement : BaseContentElement, IComparable
{
    public int Id { get; set; }
    public int Index { get; set; }
    public virtual StaticContentBlockElement Item { get; set; }
    public virtual eAnimationDirection AnimeDirectionEnum
    {
        get
        {
            if (AnimeDirection != null)
            {
                return AnimeDirection.EnumValue;
            }

            return eAnimationDirection.None;
        }
        set
        {
            AnimeDirection = AnimationDirection.Lookup[value];
        }
    }
    public virtual AnimationDirection AnimeDirection { get; set; }
public class TextListItem : BaseListItemElement {
...
}