私はASP.Net MVC3 EF4.1のプロジェクトと外部キーによるテーブル間の関係に取り組んでいます。私はデータベースの最初のアプローチを使用して、3つのテーブルを持っています:カレンダー、カレンダーのユーザーとユーザー。この関係は、カレンダーには多数のユーザーが存在し、ユーザーには多数のカレンダーを持たせることができます。Mvc3データベースの最初の関係
誰かがカレンダーを作成している場合、そのユーザーはカレンダーにアクセスするユーザー数を選択することになります。しかし今、私が混乱すると、コントローラのデータベースに変更を保存しようとしています。生成されたクラスには、何らかの形で外部キーを表す仮想ICollectionもあります。しかし、私はそれらをどう扱うべきかを理解できません。それでどうやって動くのだろう?仮想ICollectionsに変更を追加し、db.SaveChanges()を実行するだけで、それは自動的に機能するのでしょうか、それとも手動で処理すると思いますか?
手動で処理する必要がある場合は、ユーザーを追加し、カレンダーを追加してから、CalendarUsersテーブルにキーを追加してバインドしてください。 OnModelCreatingメソッドにコードを入力して関係を明確にしたコードの例をいくつか見てきましたが、まずDatabaseを使用するときにはそれだけが含まれています:throw new UnintentionalCodeFirstException();
?あなたはおそらく私のためにそれを明確にすることができますように願っています。あなたは、ナビゲーションプロパティを更新することができますし、EFはあなたのための外部キーの世話をします
public partial class Calendar
{
public Calendar()
{
this.CalendarUsers = new HashSet<CalendarUser>();
}
public int CalendarId { get; set; }
public string CalendarTitle { get; set; }
public string CalendarDescription { get; set; }
public long UserId { get; set; }
public virtual User User { get; set; }
public virtual ICollection<CalendarUser> CalendarUsers { get; set; }
}
public partial class CalendarUser
{
public int CalendarUserId { get; set; }
public int CalendarId { get; set; }
public long UserId { get; set; }
public Nullable<bool> IsAdmin { get; set; }
public virtual Calendar Calendar { get; set; }
public virtual User User { get; set; }
}
public partial class User
{
public User()
{
this.Calendars = new HashSet<Calendar>();
this.CalendarUsers = new HashSet<CalendarUser>();
}
public long UserId { get; set; }
public string Name { get; set; }
public virtual ICollection<Calendar> Calendars { get; set; }
public virtual ICollection<CalendarUser> CalendarUsers { get; set; }
}
あなたが作成したクラスを表示することができますか? (すべての詳細ではなく、クラスとキーと外部キーのプロパティを参照するプロパティだけです)重要な質問は、 'CalendarUsers'のための別のクラスを持っている場合、またはそれが(多対多の)モデルにクラスを持たないテーブル。 – Slauma
CalendarUsersは別のクラスです。多分それは良いアプローチではないでしょうか? – Janspeed
'CalendarUser'クラスはOKです。' IsAdmin'フラグのために必要です。もっと紛らわしいのは、 'Calendar.User'と' User.Calendars'の間の追加の一対多の関係です。なぜあなたはこれを持っていますか?関係は多対多であり、モデル( 'Calendar.CalendarUsers'と' User.CalendarUsers')にもあります。しかし、この追加の一対多関係の目的は何ですか? – Slauma