#c# #entity-framework
#c# #entity-framework
Вопрос:
Я пытаюсь создать связь между двумя моделями, в которых дочерний элемент ссылается на идентификатор PK плюс другой столбец Id в родительском
Public Class AClass
{
public int AClassId {get; set; }
public int UserId { get; set; }
public User User { get; set; }
public ICollection<BClass> LinkedUsers { get; set; }
public int SubUserId { get; set;}
public User SubUser{ get; set; }
public ICollection<BClass> LinkedSubUsers { get; set; }
}
Public Class BClass
{
public int BClassId {get; set; }
public int AClassId {get; set; }
public int UserId { get; set; }
public AClass AClass { get; set; }
public ICollection<Rules> Rules { get; set; }
}
Таким образом, BClass может существовать, только если у AClass есть установленный идентификатор пользователя или связанный с ним SubUserId. У нескольких классов AClass может быть несколько экземпляров BClass для одного и того же пользователя
public Aclass a = new Aclass();
a.AClassId = 1;
a.UserId = 1;
a.SubUserId = 2;
//Ok
BClass b1 = new BClass();
b1.AClassId = 1;
b1.UserId = 1;
//Ok
BClass b2 = new BClass();
b2.AClassId = 1;
b2.UserId = 1;
//OK
BClass b3 = new BClass();
b3.AClassId = 1;
b3.UserId = 2;
//Not OK No AClass 1 with UserId 3
BClass b1 = new BClass();
b1.AClassId = 1;
b1.UserId = 3;
Я создаю связь, используя:
System.Data.Entity.Конфигурация модели.Конфигурация EntityTypeConfiguration
HasRequired(c => c.AClass).WithMany(i => i.LinkedUsers).HasForeignKey(t => new { t.AClassId, t.UserId } );
но я получаю сообщение об ошибке:
«Количество свойств в зависимой и главной ролях в ограничении взаимосвязи должно быть идентичным».
Я надеюсь, что это возможно, но не могу понять, как создать правильное сопоставление с помощью EF.
Комментарии:
1. Ваш код кажется некомпетентным. Где находится
foreign-keys
inBClass
дляpublic ICollection<BClass> LinkedSubUsers { get; set; }
?2. Я не уверен, что я делаю это правильно, я думал, что идентификатор пользователя B может быть либо идентификатором пользователя, либо идентификатором подиспользователя A, и мне понадобились бы две связи, одна для идентификатора пользователя, а другая для SubUserId. Но для этого потребовалось бы, чтобы они были необязательными, если это вообще возможно.