У меня есть объект, у которого есть два внешних ключа для своей таблицы. Вот как это выглядит:
public class SystemUser : BaseModel
{
[Column("SystemUserId")]
public override Guid ID { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string MobilePhone { get; set; }
public Guid? MobilePhoneProviderId { get; set; }
public virtual MobilePhoneProvider MobilePhoneProvider { get; set; }
public Guid? ManagerId { get; set; }
public virtual SystemUser Manager { get; set; }
public Guid? AdminAssistantId { get; set; }
public virtual SystemUser AdminAssistant { get; set; }
public bool IsActive { get; set; }
public bool SendEmail { get; set; }
public string FinaleUsername { get; set; }
public string FinalePassword { get; set; }
public int? FloatUserId { get; set; }
public Guid? SystemUserTypeId { get; set; }
public virtual SystemUserType SystemUserType { get; set; }
public Guid? SystemUserJobFunctionId { get; set; }
public virtual SystemUserJobFunction SystemUserJobFunction { get; set; }
public Guid? SystemUserJobRoleId { get; set; }
public virtual SystemUserJobRole SystemUserJobRole { get; set; }
public Guid? SystemUserLocationId { get; set; }
public virtual SystemUserLocation SystemUserLocation { get; set; }
public virtual ICollection<SystemUserRole> Roles { get; set; }
}
Обратите внимание на свойства AdminAssistant
и Manager
. Однако это дает мне следующую ошибку:
Невозможно определить основной конец ассоциации между
типы 'SystemUser' и 'SystemUser'. Основной конец этого
ассоциация должна быть явно настроена с использованием либо
Свободное отношение API или аннотации данных.
Если я удаляю один из них (любой, неважно, какой), он работает нормально, но по какой-то причине он запутывается в наличии обоих. Я попытался добавить атрибуты ForeignKey
для каждого, а также использовать свободный API для его настройки следующим образом:
modelBuilder.Entity<SystemUser>()
.HasOptional(x => x.Manager)
.WithMany()
.HasForeignKey(x => x.ManagerId);
modelBuilder.Entity<SystemUser>()
.HasOptional(x => x.AdminAssistant)
.WithMany()
.HasForeignKey(x => x.AdminAssistantId);
Ни сработало. Есть ли способ сделать это?
К вашему сведению, я не использую Code First. Я пишу сценарий базы данных вручную и просто использую EF в качестве ORM. Не уверен, что эта информация актуальна, но я все равно хотел ее дать.