Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 实体框架继承_Entity Framework_Inheritance - Fatal编程技术网

Entity framework 实体框架继承

Entity framework 实体框架继承,entity-framework,inheritance,Entity Framework,Inheritance,我已经研究了几个可能的解决方案,但没有找到正确的解决方案 我需要一个完整的集合,也就是说,我需要获取也是基类型的类型。i、 e.ActionHistory类型以及从ActionHistory基类继承的所有其他类型。我的问题是我获取了所有实体,但ActionUpdate类型的实体没有填充ActionUpdateDetails集合 我的问题是无法在派生的ActionUpdate类中检索ActionUpdateDetails数据 模型中有三个类: public class ActionHistory

我已经研究了几个可能的解决方案,但没有找到正确的解决方案

我需要一个完整的集合,也就是说,我需要获取也是基类型的类型。i、 e.ActionHistory类型以及从ActionHistory基类继承的所有其他类型。我的问题是我获取了所有实体,但ActionUpdate类型的实体没有填充ActionUpdateDetails集合

我的问题是无法在派生的ActionUpdate类中检索ActionUpdateDetails数据

模型中有三个类:

public class ActionHistory
{
public int Id {get;set;}
}

public class ActionUpdate : ActionHistory
{
public ICollection<ActionUpdateDetail> ActionUpdateDetails{get;set;}
}

public class ActionUpdateDetail
{
int Id{get;set;}
public string Field{get;set;}
public string Value{get;set;}
}
我得到的只是异常消息:

无法创建“System.Collections.Generic.ICollection”“1”类型的常量值。在此上下文中仅支持基本类型(“如Int32、String和Guid”)

然后我试着模拟EF之外的情况,结果成功了。我正在使用一个POCO模型,并已将涉及的类提取到一个单独的项目中,用数据填充结构样本,并成功地对其进行了测试,即,ActionUpdateDetails集合中填充了数据

在此方面的任何帮助都将不胜感激


N.

关于你的答案,实际上,正确的方法是使用
类型的

var actionUpdateDetails=ctx.ActionHistories
第()类
.Select(x=>x.ActionUpdateDetails)
.ToList();

这会导致数据库端筛选器(内部联接),而您的解决方案会对可能不是该类型的项执行隐式强制转换-在这种情况下,您可能会得到一个空引用异常。

关于您的答案,实际上,正确的方法是使用类型的

var actionUpdateDetails=ctx.ActionHistories
第()类
.Select(x=>x.ActionUpdateDetails)
.ToList();

这会导致数据库端筛选器(内部联接),而您的解决方案对可能不是该类型的项执行隐式强制转换-在这种情况下,您可能会得到一个空引用异常。

实际上,我忘了提到我需要一个完整集,也就是说,我需要获取也属于基类型的类型。i、 e.ActionHistory类型以及从ActionHistory基类继承的所有其他类型。我的问题是我获取了所有实体,但ActionUpdate类型的实体没有填充ActionUpdateDetails集合。我提出的解决方案有一个(可能更多)副作用,它不会因为扩展的anon.type而追溯到ActionHistory:(啊,我没有注意到,在你的Q中,你没有使用抽象类。这会让生活变得困难,特别是在急切加载的情况下(如你所发现的)。那么你可能做对了。不,没有抽象类,你知道如何正确地做吗?不,没有抽象类,可以创建“基”,因此你失去了很多多态技巧(项必须始终是派生项之一,基不能实例化,等等)。如果可能的话,你应该转移到抽象类。
ActionHistory
类中除了ID之外什么都没有-那为什么还要有基呢?事实上我忘了提到我需要一个完整的集合,也就是说,我需要获取也属于基类型的类型。即ActionHistory类型,以及从Act继承的所有其他类型ionHistory基类。我的问题是我获取了所有实体,但ActionUpdate类型的实体没有填充ActionUpdateDetails集合。我提出的解决方案有一个(可能更多)副作用,它不会因为扩展的anon类型而回溯到ActionHistory。类型:(啊,我没有注意到,在你的Q-中,你没有使用抽象类。这让生活变得困难,尤其是在急切加载的情况下(正如你所发现的)。你当时可能做了正确的事情。不,没有抽象类,你知道如何正确地做到这一点吗?没有。没有抽象类,“基础”可以创建,所以您会丢失很多多态技巧(项必须始终是派生项之一,基不能实例化,等等)。如果可能,您应该移动到抽象类。
ActionHistory
类中除了ID之外什么都并没有-那个么为什么还要有基呢?
var result = from actionHistory in ActionHistories
select new {
actionHistory,
actionUpdateDetails = actionHistory is ActionUpdate ? 
(actionHistory as ActionUpdate).ActionUpdateDetails : null
};
var result = from actionHistory in ActionHistories
select new
{
    actionHistory,
    ActionUpdateDetails = (actionHistory as ActionUpdate).ActionUpdateDetails
};
var actionUpdateDetails = ctx.ActionHistories
                       .OfType<ActionUpdate>()
                       .Select(x => x.ActionUpdateDetails)
                       .ToList();