ASP.NET的MVC5的多对多关系在model层可以轻松表示出来,但也许你会碰到和我一样的问题,即我们需要在中间表添加字段来更方便我们的业务逻辑的实现或者说让我们的数据库设计显得更加合理。我们使用codefirst方式生成数据库可以以以下方式替换。
多对多关系的两张表所建的model类文件分别是Group.cs和Member.cs,其中间表生成的类文件为MemberGroup.cs。其代码如下:
Member.cs文件:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace PDMPAPP.Models
{
public enum M_Role
{
会员,管理员
}
public enum M_State
{
启用,禁用
}
[Description("用户表")]
public class Member
{
[Key]
public int M_Id { get; set; }
[DisplayName("邮箱")]
[DataType(DataType.EmailAddress,ErrorMessage ="请输入正确的邮箱地址!")]
public string M_Email { get; set; }
[DisplayName("密码")]
[DataType(DataType.Password)]
public string M_Password { get; set; }
[DisplayName("姓名")]
public string M_Name { get; set; }
[DisplayName("学号")]
public string M_StudentID { get; set; }
[DisplayName("专业")]
public string M_Major { get; set; }
[DisplayName("手机")]
public string M_Phone { get; set; }
[DisplayName("QQ")]
public string M_QQ { get; set; }
[DisplayName("权限")]
public M_Role M_Role { get; set; }
[DisplayName("状态")]
public M_State M_State { get; set; }
//导航属性
public virtual ICollection<MemberGroup> MemberGroup { get; set; }
}
}
Group.cs文件:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace PDMPAPP.Models
{
public enum G_Progress
{
学习与准备,设计与实现,测试与结项,完成
}
[Description("团队表")]
public class Group
{
[Key]
public int G_Id { get; set; }
[DisplayName("团队名称")]
public string G_Name { get; set; }
[DisplayName("项目名称")]
public string G_ProjectName { get; set; }
[DisplayName("项目进展")]
public G_Progress G_Progress { get; set; }
//导航属性
public virtual ICollection<MemberGroup> MemberGroup { get; set; }
}
}
MemberGroup.cs文件:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace PDMPAPP.Models
{
public enum MG_Role
{
负责人,队员,指导老师
}
[Description("中间表")]
public class MemberGroup
{
[Key]
public int MG_Id { get; set; }
[DisplayName("队内角色")]
public MG_Role MG_Role { get; set; }
//导航属性
public virtual Member Member { get; set; }
public virtual Group Group { get; set; }
}
}
请注意三个文件中的导航属性关系,另外注意我在MemberGroup.cs文件中添加了新字段MG_Role。
另外建model类时我使用了enum类型,这样方便在view层使用下拉列表,你可以建带mvc5视图的控制器查看view层代码,观看一下即可。
如果你不喜欢codefirst生成数据库,你也可以从现存的数据库生成model类,从数据库生成model类的方法如下:
在MVC5项目中新建ADO.NET实体数据模型,然后进行如下截图的选择,点击下一步,接下来的就自己填写吧。