ASP.Net MVC3 EF4.1を使用したプロジェクトと、外部キーを介したテーブル間の関係に取り組んでいます。私はデータベースファーストアプローチを使用しており、Calendar、Calendar Users、Usersの3つのテーブルがあります。関係は、カレンダーには多くのユーザーを含めることができ、ユーザーは多くのカレンダーを含めることができるということです。
誰かがカレンダーを作成しているとき、彼/彼女はまた、カレンダーにアクセスできるユーザーの数を選択することになっています。しかし、今、データベースへの変更をコントローラーに保存しようとすると、混乱します。生成されたクラスには、何らかの形で外部キーを表すと思われる仮想ICollectionもあります。しかし、私はそれらをどのように処理することになっているのか理解できませんか?では、どのように機能するのでしょうか。仮想ICollectionsに変更を追加してから、db.SaveChanges()を実行するだけで、それ自体で機能するのでしょうか、それとも手動で処理する必要があるのでしょうか。
手動で処理することになっている場合は、ユーザーを追加し、カレンダーを追加してから、CalendarUsersテーブルにキーを追加してそれらをバインドする必要がありますか?OnModelCreatingメソッドにコードを入力して関係を明確にしたコードの例を最初にいくつか見てきましたが、データベースを最初に使用すると、次のようになります throw new UnintentionalCodeFirstException();
。あなたがおそらく私のためにそれを少し明確にすることができることを願っています。
以下のDBcontextGeneratorによって生成されたクラスを追加しました。
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; }
}