C# 如何使用EF Core 1.1中本地数据中的子代和孙辈属性查询父代?
在将数据从旧系统导入新系统时,我需要查找具有名称和属性而不是ID的项。此外,仅当所有内容都验证时,才应保存整个导入集。所以我不能在处理不同实体之间进行保存 我曾在EF6中使用此查询: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
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中的过度膨胀造成的。忽略例外情况会有所帮助。无论如何,谢谢你为我指明了正确的方向。