Что может быть причиной данной ошибки?
public class MyModel : DbContext
{
public MyModel()
: base("name=MyModel")
{
}
public virtual DbSet<Person> PersonsInfo { get; set; }
}
public class Person
{
public int A { get; set; }
public string B { get; set; }
}
class Program
{
static void Main(string[] args)
{
MyModel db = new MyModel();
var list=db.PersonsInfo.ToList();
}
}
Для таблицы должен быть задан ключ, EntityFramework не работает с таблицами без ключа.
Ключ может быть задан через атрибут ключа [Key], либо через FluentApi
public class Person
{
[Key] // ключ задан через атрибут
public int Id { get; set; }
public int A { get; set; }
public string B { get; set; }
}
Поле Id является ключём.
В данном случае [Key] можно не писать так как EF int поле с именем Id иди ClassNameId автоматически считает ключём.
В сообщении все написано: "PersonsInfo is based on type Person that has no keys defined" - PersonInfo основан на типе Person у которого не определен первичный ключ.
Когда вы работаете с EF вы должны учитывать следующее: при именовании свойств у классов вы либо следуете, т.н. соглашениям (если свойство названо Id и имеет числовой тип, то это будет ключевое поле), либо используете аннотации в виде атрибутов [Key], либо ручками с помощью Fluent API описываете поля и их тип modelBuilder.Entity<Person>(entity => { entity.HasKey(e => e.A);});.
Потому надо сделать так
public class Person
{
[Key]
public int A { get; set; }
public string B { get; set; }
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей