我正在使用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; }
}
答案 0 :(得分:0)
您可以更新导航属性,EF将为您处理外键。有关处理类似多对多关系中的更新的示例代码,请参阅本教程的向教师编辑页面添加课程作业部分:
答案 1 :(得分:0)
您可以通过在Calendar
的新实例中设置外键属性,在现有User
和CalendarUser
之间创建新关系:
var newCalendarUser = new CalendarUser
{
CalendarId = calendarId,
UserId = userId,
IsAdmin = true // or false
};
dbContext.CalendarUsers.Add(newCalendarUser);
dbContext.SaveChanges();