Член с идентификатором не существует в коллекции метаданных. Имя параметра: личность - PullRequest
3 голосов
/ 31 марта 2012

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

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

Допустим, у Library2 есть классы C и D. Класс С { [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 ]

4 голосов
/ 31 декабря 2013

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

например,

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
}

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

0 голосов
/ 01 апреля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...