2017-03-15 9 views
1

エンティティフレームワークを使用して作成する2つのモデルクラスがあります。スキルとアクティビティです。以下は、各の定義は以下のとおりです。エンティティフレームワーク(C#ASP.NET) - 非依存エンティティでのトラッキングのないアソシエーションエンティティ

Skill.cs

public class Skill 
{ 
    public int Id { get; set; } 
    public String Name { get; set; } 
} 

Activity.cs

public class Activity 
{ 
    public int Id { get; set; } 
    public String Name { get; set; } 
    public virtual List<Skill> RequiredSkills { get; set; } 
} 

理想的には、データベースに、私は活動が外部キーを介して連結されたことにしたいと思います(SkillActivityAssocなど)とSkillとの間で何もする必要はありません。どの活動にあるスキルが必要かを追跡する必要はありません。私は、各アクティビティにどのようなスキルが必要であるかを追跡するだけで、スキルクラスにリストがない理由を説明する必要があります。私はそれが理にかなったことを望む。

私の質問です:これは正しいことですか?アクティビティのRequiredSkillsプロパティを更新すると、

activity.RequiredSkills = someInstanceOfRequiredSkillsList; 
dbcontext.Entry(activity).State = EntityState.modified; 
dbcontext.SaveChanges(); 

..のように動作しません。私は、既に関連エンティティを更新できないため、それが原因だと推測しています。さらに、私の現在の実装はスキルクラスのvirtual List<Activity>プロパティを持っています。これは取り除きたいものです。モデルデザインを変更するにはどうしたらいいですか?それに応じてRequiredSkillsを更新するにはどうすればよいですか?

ありがとうございます!

答えて

0

virtualは、遅延読み込みとEFの変更を追跡するためのものです。あなたはそれについてもっと読むことができます:Understanding code first virtual propertieshttps://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

各アクティビティに複数のスキルがあり、各スキ​​ルが複数のアクティビティにも存在したいので、多対多のスキルを持つことになります。 relantionship。この例をお読みください:How to create a many-to-many mapping in Entity Framework?とこれはhttp://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

+0

ありがとうございました。しかし、それを使用するアクティビティへの参照を持たないスキルと多対多の関係を作成することは可能ですか?つまり、アクティビティにはスキルのナビゲーションプロパティがありますが、スキルはリンクされたアクティビティを追跡していません。 – Vandenn

+0

はい、あなたが持つことができます。 EFのコレクションプロパティはナビゲーションプロパティです。詳細はこちらhttps://stackoverflow.com/questions/16718699/map-many-to-many-relationship-without-navigation-propertyおよびMSDNのドキュメント:https://msdn.microsoft.com/en- us/library/jj713564(v = 117).aspx –

+0

もう一度あなたの答えをありがとう! :) – Vandenn

関連する問題