EF Core 1.1のローカルデータで子と孫のプロパティを使用して親に問い合わせるにはどうすればよいですか?

c# entity-framework-core linq

質問

レガシシステムから新しいシステムにデータをインポートする際に、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でこれを実行しようとすると、次のエラーが発生します。

System.ArgumentExceptionが発生しましたHResult = -2147024809
Message = Field 'Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor + TransparentIdentifier 2[MetaUI.Models.MetaAttribute,System.Collections.Generic.IEnumerable 1] [Project.Models.MetaConcept]]。Innerは、タイプ' Microsoft.EntityFrameworkCoreに定義されていません。 Query.EntityQueryModelVisitor + TransparentIdentifier`2 [Project.Models.MetaAttribute、Project.Models.MetaConcept] 'Source = System.Linq.Expressions StackTrace:at System.Linq.Expressions.Expression.Field(Expression式、FieldInfoフィールド)InnerException:

このエラーはどういう意味ですか?EF 1.1を使用したこの種の照会に対するベストプラクティスは何ですか?

モデル全体は非常に複雑ですが、関連するクラスを単純化したものがここにあります。追加(エンティティクラスと設定):

 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);

受け入れられた回答

私にとっての解決策は、デバッガからこの例外を除外することでした。だから私はVisual Studioとやり過ぎていました。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ