Что может быть причиной данной ошибки?
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; }
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задача: создать два логаПервый для записи Info, второй для записи Errors
У меня программа для решения уравнения методом касательнойНа форме разместила интервал и точность, а на кнопку Вычислить нужно прописать...
Здрастувуйте! Как сделать чтобы при выборе CheckBox пароль скрывался и наоборот, все никак не могу понять
Применение BlockingCollection, используя подход, когда элементы вытаскиваются из очереди(например ConcurrentQueue), используя метод Take в цикле - всегда блокирует...