Не создается база данных в entity framework?

223
20 декабря 2017, 19:24

Что может быть причиной данной ошибки?

 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();
        }
    }

Answer 1

Для таблицы должен быть задан ключ, 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 автоматически считает ключём.

Answer 2

В сообщении все написано: "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; }
}
READ ALSO
Создание второго лога используя Nlog

Создание второго лога используя Nlog

Задача: создать два логаПервый для записи Info, второй для записи Errors

484
Метод касательных (Ньютона) на c#, приближенное нахождение производной

Метод касательных (Ньютона) на c#, приближенное нахождение производной

У меня программа для решения уравнения методом касательнойНа форме разместила интервал и точность, а на кнопку Вычислить нужно прописать...

252
PasswordBox C# WPF

PasswordBox C# WPF

Здрастувуйте! Как сделать чтобы при выборе CheckBox пароль скрывался и наоборот, все никак не могу понять

177
BlockingCollection - как не блокировать поток

BlockingCollection - как не блокировать поток

Применение BlockingCollection, используя подход, когда элементы вытаскиваются из очереди(например ConcurrentQueue), используя метод Take в цикле - всегда блокирует...

237