无论如何设置模型中许多表的关系?

时间:2015-06-08 14:00:13

标签: c# sql-server entity-framework

我想设置一些表的关系,并使表中的某些列可以为null。

[Table("tbl_useraccount")]
public class AccountViewModels
{
   [Key]
   public string AccountId { get; set; }
   public string Email { get; set; }
   public string HashPassword { get; set; }
}

这是我想建立关系的表格:

[Table("tbl_userprofile")]
public class UserProfileViewModels
{
   [Key]
   public int Id { get; set; }
   public string AccountId { get; set; }
   public string Address { get; set; }
   public int PhoneNumber { get; set; }
}

我的问题是:如何设置AccountId(在表tbl_useraccount中)是主键,并且作为模型表tbl_userprofile中的外键?

我的子问题是:是否有必要为每个列名设置NULLNOT NULL?如果有必要,我该怎么做?

p / s:我使用的是MVC 5和SQL Server。

1 个答案:

答案 0 :(得分:0)

我的第一个注意事项是您不使用viewmodels进行数据库生成。 ViewModels仅用于您的视图。

要创建关系,您应该将AccountModel添加到UserProfile,我添加了虚拟以启用延迟加载。还要将ForeignKey数据注释添加到要将键映射到的额外属性(可选)

[Table("tbl_useraccount")]
public class AccountModel
{
   [Key]
   public string AccountId { get; set; }
   public string Email { get; set; }
   public string HashPassword { get; set; }
}


[Table("tbl_userprofile")]
public class UserProfileModels
{
   [Key]
   public int Id { get; set; }
   public string AccountId { get; set; }
   public string Address { get; set; }
   [ForeignKey("AccountModel")]
   public int PhoneNumber { get; set; }

   public virtual AccountModel AccountModel { get; set;}
}

如果您希望字段不为空,如果这是可能的话。使用[必需]数据注释。 “Public int PhoneNumber”不能为null,您必须按如下方式编写它:“Public int?PhoneNumber”。