Mvc3数据库第一关系

时间:2012-04-30 12:05:44

标签: asp.net-mvc-3 entity-framework-4.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; }
}

2 个答案:

答案 0 :(得分: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-application

答案 1 :(得分:0)

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

var newCalendarUser = new CalendarUser
{
    CalendarId = calendarId,
    UserId = userId,
    IsAdmin = true // or false
};
dbContext.CalendarUsers.Add(newCalendarUser);
dbContext.SaveChanges();