Член с идентификатором не существует в коллекции метаданных. Имя параметра: личность

Мы используем EF Code First 4.3.1. Мы разрабатываем веб-роль ASP.NET со ссылкой на несколько библиотек классов. Есть две библиотеки классов, каждая из которых содержит классы и отдельный DBcontext.

Допустим, у Library1 есть классы A и B. DBcon1: DbSet и DbSet

Допустим, библиотека2 имеет классы C и D. Класс C{ [Key] public int CId{ get; задавать;}

[Required]
public virtual A referencedA {get; set;}
}
DBcon2: DbSet<C> and DbSet<D>

Когда я пытаюсь использовать DBcon2 как таковой:

        using (var con = new DBcon2())
        {
            C vr = new C();
            vr.CId= 1;
            vr.referencedA = DBCon1.As.First();
            con.Cs.Add(vr);
            con.SaveChanges();
        }

Я получаю исключение: "Член с идентификатором не существует в коллекции метаданных. Имя параметра: идентификатор"

И DBCon1, и DBcon2 используют нормальную базу данных SQL Server "SampleDB".

Пожалуйста, укажите мне в правильном направлении.

2 ответа

Я получил эту ошибку и исправил ее, не пытаясь установить свойство навигации в соответствующей таблице, просто вместо этого установить идентификатор внешнего ключа

например

public class Student()
{
    public int StudentId { get; set; }
    public string StudentName { get; set; }
    public int CourseId { get; set; }
    public virtual Course Course { get; set; }
}

public class Course()
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public virtual ICollection<Student> Students { get; set; }
}

Основной код:

var myCourse = new Course();
var myCourseId = 1;

var student = new Student() {
    CourseId = myCourseId
    // Course = myCourse <-- this would cause the error
}

Может быть, это не ваша проблема, но, возможно, это укажет вам правильное направление и, надеюсь, поможет кому-то еще.

Исключение немного загадочно, но довольно ясно, если вы понимаете, что контексту нужна информация об объектах (метаданных), чтобы иметь возможность писать операторы SQL. Таким образом, ваш контекст DBcon2 не имеет ни малейшего понятия, где найти первичный ключ Aпотому что у него нет метаданных об А.

Однако вы можете установить целочисленное свойство A_Id (или подобное), но тогда вам придется написать собственный код, чтобы разрешить его в A,

Другой вариант - объединить (части) контекстов, если это возможно.

Другие вопросы по тегам