添加额外列以连接表

时间:2015-03-30 19:16:50

标签: c# entity-framework entity-framework-6

我目前有员工模特

public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<StateLicenseType> Licenses { get; set; }

和许可证类型模型

public class StateLicenseType
{
    public int StateLicenseTypeId { get; set; }
    public string State { get; set; }
    public string LicenseName { get; set; }
    public virtual Employee Employee { get; set; }
}

此关系可以是一对多,但我还需要在保存时向许可添加一些信息。我需要能够存储员工唯一的许可证号码,并且在搜索时无法找到如何执行此操作。有没有办法让Entity Framework为连接表添加一个列,然后即使我必须自己更新它?

是否有更好/不同的方式来模拟这种与EF的关系?

在旧数据库中,表格就是这样创建的,

CREATE TABLE `nmlsstatelicenses` ( `peopleid` int(11) DEFAULT NULL,  `statelicensetypeid` int(11) DEFAULT NULL, `licensenumber` varchar(25) DEFAULT NULL)

1 个答案:

答案 0 :(得分:1)

您需要创建一个第三个实体,它将成为一个链接实体(就像数据库中多对多关系中的链接表。这是一个例子:many-to-many relationships with additional information.

因此,您的模型中将包含以下实体:

public Employee 
{
    public string EmployeeId { get;set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<LicenseRegistration> RegisteredLicenses { get; set; }
}
public LicenseType
{
   public int StateLicenseTypeId { get; set; }
   public string State { get; set; }
   public string LicenseName { get; set; } 
   public virtual ICollection<LicenseRegistration> RegisteredLicenses { get; set; }
}
public LicenseRegistration
{
   //properties for the additional information go here
   /////////////////////////////////////////////////////

   public int EmployeeId {get;set;}
   [ForeignKey("EmployeeId")]
   public Employee Employee {get;set;}

   public int LicenseTypeId {get;set;}
   [ForeignKey("LicenseTypeId")]
   public LicenseType {get;set;}
}

然后,在您的DBContext文件中,您需要定义Employee和LicenseRegistration之间以及LicenseType和LicenseRegistration之间的1对多关系。

希望这有帮助!

<强>更新 以下是建立关系的方法:

modelbuilder.Entity<LicenseRegistration>()
            .HasRequired(lr => lr.LicenseType)
            .WithMany(lt => lt.RegisteredLicenses)
            .HasForeignKey(lr => lr.LicenseTypeId);

modelbuilder.Entity<LicenseRegistration>()
            .HasRequired(lr => lr.Employee)
            .WithMany(e => e.RegisteredLicenses)
            .HasForeignKey(lr => lr.EmployeeId);