В настоящее время у меня есть модель сотрудника
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)
Вам необходимо создать третий объект, который будет связующим объектом (например, связующая таблица во взаимоотношениях "многие ко многим" в базе данных. Вот пример: отношения " многие ко многим" с дополнительной информацией.
Таким образом, в вашей модели были бы следующие объекты:
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.
Надеюсь это поможет!
ОБНОВЛЕНИЕ Вот как вы установили отношения:
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);