2016-03-31 3 views
0

私のアプリケーションでは、メインエンティティが作成される前に、添付ファイルがデータベースに追加されます。添付ファイルは、ユーザーがフォームに記入している間にアップロードされます。添付ファイルのIDはブラウザクライアントに返されます。エンティティが作成されたときに続いて、JSONオブジェクトは、次の形式(C#の表現)で送信されます。外部キーのリストをエンティティフレームワーク内のエンティティのリストにリンクする最も良い方法

public class EntityModel { 
    // some properties 
    //... 
    ICollection<int> AttachementIds { get;set; } 
} 

今私は、Entity Frameworkのような、そして効率的な方法でこれらのIDを保存したいと思います。理想的には、このようなEntity Frameworkの機能がいくつかあります。

Entity entity = Mapper.Map<Entity>(entityModel); 
dbContext.Entities.Add(entity); 
dbContext.SaveChanges(); 

をし、このように問い合わせることができます:

List<Attachement> attachements = dbContext.Entities.Find(1).Attachements.ToList(); 

可能ならば、効率的に似た何かをする方法、の添付を保つ私はやる必要があるだろう

public class Entity { 
    public ICollection<Attachement> Attachements; 
    public ICollection<int> AttachementsIds; 
} 

データベースに?

おかげ

+0

を誰かがdownvoteを説明していただけますか?データベースからアタッチメントを取り出すことなくこれを行う簡単な方法はありますか? – raichu

答えて

1

はい、あなたはFKSにフェッチする必要がないからです。 AttachementにIdプロパティがあると仮定して、エンティティモデル(Entity)にint IDのコレクションを追加しないでください。今、あなたはこのように保存することができます(他の方法にもあります):

var entity = Mapper.Map<Entity>(entityModel); //parent properties 
foreach (var id in AttachementsIds) 
{ 
    entity.Attachements.Add(new Attachement { Id = id }); 
} 
dbContext.Entities.Add(entity); 
dbContext.SaveChanges(); 

が(検索として子どもを背中もたらすことはありません)あなたのクエリを調整する必要があります(またはToListメソッドで動作):

var attachement = dbContext.Entities 
          .Include(e => e.Attachements) 
          .First(e => e.Id == 1); 

それとも、リストしたい場合:

var attachements = dbContext.Entities 
          .Include(e => e.Attachements) 
          .ToList(); 
関連する問題