1

我正在使用 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; }
}
4

2 回答 2

0

您可以更新导航属性,EF 将为您处理外键。有关以类似的多对多关系处理更新的示例代码,请参阅本教程的将课程作业添加到教师编辑页面部分:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/updating-related-data-with-the-entity-framework-in-an-asp-net-mvc-应用

于 2012-04-30T22:16:53.263 回答
0

您可以通过在 的新实例中设置外键属性来创建现有Calendar和之间的新关系:UserCalendarUser

var newCalendarUser = new CalendarUser
{
    CalendarId = calendarId,
    UserId = userId,
    IsAdmin = true // or false
};
dbContext.CalendarUsers.Add(newCalendarUser);
dbContext.SaveChanges();
于 2012-05-03T13:05:20.287 回答