Добавление дополнительного столбца в таблицу присоединений

1

В настоящее время у меня есть модель сотрудника

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)
Теги:
entity-framework
entity-framework-6

1 ответ

1
Лучший ответ

Вам необходимо создать третий объект, который будет связующим объектом (например, связующая таблица во взаимоотношениях "многие ко многим" в базе данных. Вот пример: отношения " многие ко многим" с дополнительной информацией.

Таким образом, в вашей модели были бы следующие объекты:

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);
  • 0
    Похоже, это сработает для меня. Я думал об этом, но не мог понять это правильно, в том, как три класса должны быть связаны. Благодарю.
  • 0
    Я добавил код для настройки отношений в классе dbcontext.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню