Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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# 如何使用EF Core 1.1中本地数据中的子代和孙辈属性查询父代?_C#_Linq_Entity Framework Core - Fatal编程技术网

C# 如何使用EF Core 1.1中本地数据中的子代和孙辈属性查询父代?

C# 如何使用EF Core 1.1中本地数据中的子代和孙辈属性查询父代?,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,在将数据从旧系统导入新系统时,我需要查找具有名称和属性而不是ID的项。此外,仅当所有内容都验证时,才应保存整个导入集。所以我不能在处理不同实体之间进行保存 我曾在EF6中使用此查询: MetaAttribute fromAttribute = db.Attributes .Single(a => (a.Concept.Name.Equals(entit

在将数据从旧系统导入新系统时,我需要查找具有名称和属性而不是ID的项。此外,仅当所有内容都验证时,才应保存整个导入集。所以我不能在处理不同实体之间进行保存

我曾在EF6中使用此查询:

      MetaAttribute fromAttribute =
                    db.Attributes
                    .Single(a =>
                        (a.Concept.Name.Equals(entityName)) &&
                        (a.Concept.System.Code.Equals(defaultSystem.Code)) &&
                        (a.Name.Equals(attributeName)))
                ??   db.Attributes.Local.Single(a => (a.Concept.Name == entityName) && (a.Concept.System.Code == defaultSystem.Code) && (a.Name == attributeName));
如果我尝试使用Entity Framework Core 1.1运行此操作,则会出现以下错误:

系统.参数异常发生HResult=-2147024809
消息=字段 'Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor+TransparentIdentifier
2[MetaUI.Models.MetaAttribute,System.Collections.Generic.IEnumerable
1[Project.Models.MetaConcept].' 未为类型定义 'Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor+TransparentIdentifier'2[Project.Models.MetaAttribute,Project.Models.MetaConcept]' Source=System.Linq.trace: 在System.Linq.Expressions.Expression.Field(Expression Expression,FieldInfo Field)InnerException中:

这个错误意味着什么?对于EF 1.1这种查询的最佳实践是什么

整个模型非常复杂,但这里是相关类的简化版本。 添加(实体类和配置):

public类元属性:元数据库,IValidatableObject
{
[关键]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
公共int AttributeID{get;set;}
[MaxLength(350)]
公共字符串名称{get;set;}
[外键(“概念ID”)]
[JsonIgnore]
公共元概念概念{get;set;}
公共int?概念ID{get;set;}
}
公共类元概念:元数据库
{        
[关键]
公共int概念ID{get;set;}
[必需]
public int ConceptVersionID{get;set;}
公共字符串标题{get;set;}
[必需]
[最大长度(255)]
公共字符串名称{get;set;}
[JsonIgnore]
来自概念{get;set;}的公共元概念
public int?SystemID{get;set;}
[外键(“系统ID”)]
公共元系统系统{get;set;}
公共ICollection属性{get;set;}
公共元概念()
{
属性=新集合();
}
}   
公共类元系统:元数据库
{
[关键]
public int SystemID{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
[必需]
[MaxLength(400)]
公共字符串代码{get;set;}
}   
公共抽象类元数据库
{
[列(TypeName=“datetime2”)]
已创建公共日期时间{get;set;}
[列(TypeName=“datetime2”)]
公共日期时间?LastModified{get;set;}
[时间戳]
公共字节[]行版本{get;set;}
[最大长度(300)]
公共字符串LastChangedBy{get;set;}
}
配置:

 public class MetaAttribute : MetaBase, IValidatableObject
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int AttributeID { get; set; }


        [MaxLength(350)]
        public string Name { get; set; }
        [ForeignKey("ConceptID")]
        [JsonIgnore]

        public MetaConcept Concept { get; set; }
        public int? ConceptID { get; set; }
}

 public class MetaConcept : MetaBase
    {        
        [Key]
        public int ConceptID { get; set; }
        [Required]
        public int ConceptVersionID { get; set; }
        public string Title { get; set; }
        [Required]
        [MaxLength(255)]
        public string Name { get; set; }

        [JsonIgnore]
        public MetaConcept FromConcept { get; set; }

        public int? SystemID { get; set; }

        [ForeignKey("SystemID")]
        public MetaSystem System { get; set; }
        public ICollection<MetaAttribute> Attributes { get; set; }

        public MetaConcept()
        {
            Attributes = new Collection<MetaAttribute>();

        }
    }   

  public class MetaSystem : MetaBase
    {
        [Key]
        public int SystemID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        [Required]
        [MaxLength(400)]
        public string Code { get; set; }
    }   

 public abstract class MetaBase
    {
        [Column(TypeName = "datetime2")]

        public DateTime Created { get; set; }
        [Column(TypeName = "datetime2")]
        public DateTime? LastModified { get; set; }
        [Timestamp]
        public byte[] RowVersion { get; set; }

        [MaxLength(300)]
        public string LastChangedBy { get; set; }


    }
        modelBuilder.Entity<MetaAttribute>()
                .Property(b => b.AttributeID)
               .ValueGeneratedOnAdd();
        modelBuilder.Entity<MetaSystem>()
           .HasAlternateKey(c => c.Code);
modelBuilder.Entity()
.Property(b=>b.AttributeID)
.ValueGeneratedOnAdd();
modelBuilder.Entity()
.hasaAlternateKey(c=>c.Code);

我的解决方案是从调试器中排除此异常。所以我过度使用Visual Studio。

我的解决方案是从调试器中排除此异常。所以我过度使用Visual Studio。

哪个部分会产生异常-
db.Attributes.Local….
?即使没有本地部分,它也会产生异常。您可以发布模型(实体类+配置,如果存在)吗?谢谢。我已将您的模型应用于测试EF核心数据库,但无法再现确切的异常。我得到的是
invalidooperationexception
消息“Sequence contains no elements”(序列不包含任何元素),这是此类代码的预期结果。一旦我将
Single
更改为
SingleOrDefault
(或
FirstOrDefault
),它将执行w/o问题。EF Core 1.1.0,SQLServerDB,如果这很重要的话。但我当然没有数据(表格是空的)。难以置信,我感到很羞愧。这个问题似乎是由于VisualStudio中的过度膨胀造成的。忽略例外情况会有所帮助。无论如何,感谢您为我指明了正确的方向。哪个部分会产生异常-
db.Attributes.Local…
?即使没有本地部分,它也会产生异常。您可以发布模型(实体类+配置,如果存在)吗?谢谢。我已将您的模型应用于测试EF核心数据库,但无法再现确切的异常。我得到的是
invalidooperationexception
消息“Sequence contains no elements”(序列不包含任何元素),这是此类代码的预期结果。一旦我将
Single
更改为
SingleOrDefault
(或
FirstOrDefault
),它将执行w/o problem。EF Core 1.1.0,SQLServerDB,如果这很重要的话。但我当然没有数据(表格是空的)。难以置信,我感到很羞愧。这个问题似乎是由于VisualStudio中的过度膨胀造成的。忽略例外情况会有所帮助。无论如何,谢谢你为我指明了正确的方向。