我正在使用 ASP.Net MVC3 EF4.1 和通过外键的表之间的关系进行项目。我使用的是数据库优先方法,并有三个表:日历、日历用户和用户。关系是一个日历可以有很多用户,而用户可以有很多日历。
当某人创建日历时,他/她还应该选择有权访问日历的用户数量。但是现在当我要在控制器中保存对数据库的更改时,我会感到困惑。在生成的类中,还有虚拟的 ICollections 我想它以某种方式代表外键。但我不知道我应该如何处理它们?那么它应该如何工作呢?我是否应该能够将更改添加到虚拟 ICollections,然后只执行 db.SaveChanges() 并且它会自行工作,还是我应该手动处理?
如果我应该手动处理它,那么我应该添加用户,添加日历,然后在 CalendarUsers 表中添加键以将它们绑定在一起吗?我首先从代码中看到了一些示例,他们通过在 OnModelCreating 方法中输入代码来阐明关系,但是当首先使用 Database 时,它只包含 throw new UnintentionalCodeFirstException();
:希望你也许可以为我澄清一下。
在下面添加了由 DBcontext Generator 生成的类:
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; }
}