Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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# 实体框架核心连接&;包括内部实体_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

C# 实体框架核心连接&;包括内部实体

C# 实体框架核心连接&;包括内部实体,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,和我的ItemVersions模型: public class Item { [Key] public int Id { get; set; } public string Name { get; set; } public int TypeCodeId { get; set; } public TypeCodes TypeCode { get; set; } public int? OriginalLangId { get; set; }

和我的ItemVersions模型:

public class Item
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public int TypeCodeId { get; set; }
    public TypeCodes TypeCode { get; set; }
    public int? OriginalLangId { get; set; }
    public int SubGenreCodeId { get; set; }
    public List<ItemVersion> ItemVersions { get; set; }      
}
公共类ItemVersion
{
[关键]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表原始目录{get;set;}
公开列表短标题{get;set;}
公共列表项概要{get;set;}
公共列表项LongSynopsis{get;set;}
公共列表项语言{get;set;}
公共列表版本通道{get;set;}
公共布尔值是默认值{get;set;}
公共项项{get;set;}
公共int ItemId{get;set;}
}
如果可能的话,寻找一种不需要迭代就可以立即包含它的方法。感谢

尝试(将
Include
方法移动到
join
子句,其中选中了表):

List Item=来自它的_context.Item
在它上面的_context.ItemVersions.Include(“OriginalTitles”)中加入iv。Id等于iv.ItemId
在iv上的_context.itemOriginalties中加入iot。Id等于iot.ItemVersionId
其中term.ToLower()=“all”||(it.Name.ToLower()=“term.ToLower()| it.Name.ToLower().Contains(term.ToLower())| iot.Value.Contains(term)|
queryable.Any(x=>iot.Value.Contains(x.SearchText)))
选择新项目
{
Id=it.Id,
Name=it.Name,
TypeCodeId=it.TypeCodeId,
TypeCode=it.TypeCode,
OriginalLangId=it.OriginalLangId,
SubGenreCodeId=it.SubGenreCodeId,
ItemVersions=it.ItemVersions
};

因为我初始化了一个新对象,所以包含内部实体并不重要。我的解决方案是返回db对象并将includes移动到其中:

List<Item> Item = from it in _context.Item
                  join iv in _context.ItemVersions.Include("OriginalTitles") on it.Id equals iv.ItemId
                  join iot in _context.ItemOriginalTitles on iv.Id equals iot.ItemVersionId                    
                  where term.ToLower() == "all" || (it.Name.ToLower() == term.ToLower() || it.Name.ToLower().Contains(term.ToLower()) || iot.Value.Contains(term) || 
                  queryable.Any(x => iot.Value.Contains(x.SearchText)))
                  select new Item
                  {
                      Id = it.Id,
                      Name = it.Name,
                      TypeCodeId = it.TypeCodeId,
                      TypeCode = it.TypeCode,
                      OriginalLangId = it.OriginalLangId,
                      SubGenreCodeId = it.SubGenreCodeId,
                      ItemVersions = it.ItemVersions
                  };

@AaYy尝试
.Include(iv=>iv.originalties)
我相信“选择新项目”并不在意Include
Include(iv=>iv.originalties)
是一回事。不工作。如果由于lambda版本出现编译器错误而必须使用
Include
的字符串版本,则可以确保Include无效。它可能作为
\u context.Item.Include(“ItemVersions.OriginalTitles”)
工作,但我不确定,因为您没有输入EF版本,并且忽略的Include部分已经从文档中删除,这可能表明EF core 3中的行为还没有很好定义/稳定。您在说@GertArnold什么?我加入的原因是搜索,搜索才是最重要的。初始化新项目时,搜索不起作用。“他们想要”是什么意思?我问了这个问题。为什么投反对票??
 public class ItemVersion
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public List<ItemOriginalTitle> OriginalTitles { get; set; }
        public List<ItemShortTitle> ShortTitles { get; set; }
        public List<ItemSynopsis> ItemSynopsis { get; set; }
        public List<ItemLongSynopsis> ItemLongSynopsis { get; set; }
        public List<ItemLanguage> ItemLanguages { get; set; }
        public List<VersionChannel> VersionChannels { get; set; }
        public bool IsDefault { get; set; }
        public Item Item { get; set; }
        public int ItemId { get; set; }
    }
List<Item> Item = from it in _context.Item
                  join iv in _context.ItemVersions.Include("OriginalTitles") on it.Id equals iv.ItemId
                  join iot in _context.ItemOriginalTitles on iv.Id equals iot.ItemVersionId                    
                  where term.ToLower() == "all" || (it.Name.ToLower() == term.ToLower() || it.Name.ToLower().Contains(term.ToLower()) || iot.Value.Contains(term) || 
                  queryable.Any(x => iot.Value.Contains(x.SearchText)))
                  select new Item
                  {
                      Id = it.Id,
                      Name = it.Name,
                      TypeCodeId = it.TypeCodeId,
                      TypeCode = it.TypeCode,
                      OriginalLangId = it.OriginalLangId,
                      SubGenreCodeId = it.SubGenreCodeId,
                      ItemVersions = it.ItemVersions
                  };
  Item = (from it in _context.Item.Include("ItemVersions.OriginalTitles")
                join iv in _context.ItemVersions on it.Id equals iv.ItemId
                join iot in _context.ItemOriginalTitles on iv.Id equals iot.ItemVersionId
                where term.ToLower() == "all" || (it.Name.ToLower() == term.ToLower() || it.Name.ToLower().Contains(term.ToLower()) || iot.Value.Contains(term) ||
                queryable.Any(x => iot.Value.Contains(x.SearchText)))
                select it          
       ).ToList();