2013-03-19 2 views
0

Я получаю следующее сообщение об ошибке: Тип «EfTest.Person» не был отображен. Убедитесь, что тип не был явно исключен с помощью аннотации данных Ignore или NotMappedAttribute. Убедитесь, что тип был определен как класс, не является примитивным, вложенным или обобщенным и не наследуется от EntityObject.Entity Framework и базовый тип с таким же именем

при выполнении этого кода:

using System.Data.Entity; 
namespace EfTest 
{ 
internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     using (var db = new PersonContext()) 
     { 
      db.Persons.Add(new Person()); 
      db.SaveChanges(); 
     } 
    } 
} 

public class PersonContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } //people ;) 
} 

public class Person : EfTest2.Person 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
} 
}namespace EfTest2 
{ 
public class Person 
{ 
    public int Age { get; set; } 
} 

}

вы можете помочь и объяснить, почему новый тип не может иметь такое же имя, как его основания?

+0

Вы пробовали его с другим именем? –

+0

Да, я это сделал, поэтому прошу про это – pokrec

ответ

0

Я хотел бы сфокусировать внимание на ключевом слове в ошибке. Я уверен, что вывести его из пространства имен EfTest2 и сохранить пространство имен одинаково, исправит эту проблему. Конечно, тогда вы должны изменить имя базового класса от Person на что-то еще.

+0

Да, я знаю об этом, я знаю, как обойти эту проблему, но я хочу знать, почему это так – pokrec

0

EF имеет довольно сложное многослойное отображение, и некоторые из этих слоев непосредственно не видны снаружи. Это проблема отображения объектов в их представление сущности в EDM. Дело в том, что EF не использует полные имена классов (включая пространства имен), а только только имена классов, поэтому ваши классы Person находятся в конфликте, и только один может быть разрешен.

Происхождение этого поведения, вероятно, в EF 4.0, когда оно использовалось для упрощения создания классов для моделей POCO и создания пространств имен, независимых от EDMX.

0

Думаю, вы не можете написать класс рядом с основной сессией. Вы должны разделить его на другой файл cs. Я решил проблему, выполнив это. Стоит попробовать

Смежные вопросы