Как создать ссылку releationship на столбец PK плюс другой

#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 in BClass для public ICollection<BClass> LinkedSubUsers { get; set; } ?

2. Я не уверен, что я делаю это правильно, я думал, что идентификатор пользователя B может быть либо идентификатором пользователя, либо идентификатором подиспользователя A, и мне понадобились бы две связи, одна для идентификатора пользователя, а другая для SubUserId. Но для этого потребовалось бы, чтобы они были необязательными, если это вообще возможно.