Предложение по сопоставлению возможного общего внешнего ключа (объекта значения в сущности) в Entity Framework 4.1?
-
07-09-2020 - |
Вопрос
У меня есть сущность Project и сущность Rfi.Сущность проекта содержит список участников команды.Project — это свойство навигации в сущности Rfi.В сущности Rfi есть RecipientId.Этот идентификатор представляет человека из коллекции TeamMembers.Итак, представьте, что на веб-странице у нас есть раскрывающийся список с именем «Получатель».В список включены все участники команды Проекта.Пользователь выберет контакт из этого списка.Идентификатор этого контакта будет сохранен в свойстве RecipientsId.Когда страница будет перезагружена, мы выберем идентификатор этого пользователя в раскрывающемся списке на основе значения свойства RecipeintsId.Как лучше всего отобразить это в EF 4.1 с помощью свободного API?
public class Project : BaseEntity
{
public string ProjectNumber { get; set; }
public string Description { get; set; }
public string CreatedBy { get; set; }
public string ModifiedBy { get; set; }
public string Currency { get; set; }
#region Navigation Properties
public Guid AddressId { get; set; }
public virtual Address Address { get; set; }
public Guid CompanyCodeId { get; set; }
public virtual CompanyCode CompanyCode { get; set; }
public virtual ICollection<Contact> TeamMembers { get; set; }
#endregion
}
public class Rfi : Document
{
public string Number { get; set; }
public string Subject { get; set; }
public string SubcontractorRfiReference { get; set; }
public string SpecificationSection { get; set; }
public RfiStatus RfiStatus { get; set; }
public Guid RecipientId { get; set; }
#region Navigation Properties
public Guid ProjectId { get; set; }
public Project Project { get; set; }
#endregion
}
Решение
Насколько я понимаю, ваша проблема заключается в сопоставлении между Rfi
и Contect
- Project
не имеет никакой роли в ваших функциях получателя с точки зрения базы данных.
Вам нужно либо Recipient
свойство навигации в Rfi
или Rfis
свойство навигации в Contact
.Сначала код EF требуется свойство навигации хотя бы на одной стороне отношения.
Итак, вы можете использовать что-то вроде:
public class Rfi : Document
{
public string Number { get; set; }
public string Subject { get; set; }
public string SubcontractorRfiReference { get; set; }
public string SpecificationSection { get; set; }
public RfiStatus RfiStatus { get; set; }
#region Navigation Properties
public Guid RecipientId { get; set; }
public Contact Recipient { get; set; }
public Guid ProjectId { get; set; }
public Project Project { get; set; }
#endregion
}
И карта:
modelBuilder.Entity<Rfi>()
.HasRequired(r => r.Recipient)
.WithMany()
.HasForeignKey(r => r.RecipientId);