2017-01-03 6 views
0

レガシーシステムから新しいシステムにデータをインポートする際に、IDの代わりに名前とプロパティを持つアイテムを見つける必要があります。また、インポートされたセット全体は、すべてが検証された場合にのみ保存する必要があります。だから私は、異なるエンティティを処理する間に節約をすることはできません。EF Core 1.1のローカルデータ内の子と孫のプロパティを持つ親を照会する方法は?

私は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のコア1.1でこれを実行しようとすると、私は次のエラーを取得する:

System.ArgumentException occurred HResult=-2147024809
Message=Field 'Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor+TransparentIdentifier 2[MetaUI.Models.MetaAttribute,System.Collections.Generic.IEnumerable 1[Project.Models.MetaConcept]].Inner' is not defined for type 'Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor+TransparentIdentifier`2[Project.Models.MetaAttribute,Project.Models.MetaConcept]' Source=System.Linq.Expressions StackTrace: at System.Linq.Expressions.Expression.Field(Expression expression, FieldInfo field) 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); 
+0

'db.Attributes.Local ....'例外を生成する部分はどれですか? –

+0

ローカル部分がなくても例外を生成します。 – DarkVader

+0

モデルを投稿できますか(存在する場合はエンティティクラス+設定)? –

答えて

1

ソリューションは、デバッガからこの例外を除外することでした。だから、私はVisual Studioを使いすぎてしまった。

関連する問題