Можно ли использовать Entity Framework Core с существующей базой данных в таблицах без первичного ключа? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь использовать Entity Framework Core с существующей базой данных. В этой базе данных есть несколько таблиц, у которых не установлены первичные ключи из-за других процессов (вне области приложения, которое я создаю), которые сломаются, если установлен первичный ключ.

Можно ли создавать модели таблиц без первичного ключа?

Я сейчас использую:

  • Microsoft.EntityFrameworkCore -Version 2.0.1
  • Microsoft.EntityFrameworkCore.SqlServer -Version 2.0.1
  • Microsoft.EntityFrameworkCore.SqlServer.Design -Version
  • Microsoft.EntityFrameworkCore.Tools -Version 2.0.1
  • Microsoft.EntityFrameworkCore.Tools.DotNet - Версия 2.0.0

Я получаю эту ошибку при выполнении команды ниже "Unable to generate entity type for table '...'. Please see the warning messages."

Команда, которую я запускаю:

Эшафот-DbContext "Server = ... myservernamehere ...; Database = ... mydbnamehere ...; Trusted_Connection = True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

1 Ответ

0 голосов
/ 13 июня 2019

Скаффорд не будет работать без первичного ключа. Тем не менее, есть обходной путь. По крайней мере, в 2.2.0 я не могу точно сказать, будет ли это работать в более старых версиях.

  • После того, как вы создадите файл DBContext для базы данных

  • По крайней мере один из ваших столбцов должен быть уникальными данными

  • Вам потребуется создать класс модели для таблицы со всеми интересующими вас столбцами. Было бы лучше использовать то же имя и тип данных, что и в таблице.

  • Создайте свой DbSet

    public virtual DbSet<Model of table>  { get; set; }
    
  • В вашем OnModelCreating(ModelBuilder modelBuilder) создайте сопоставление с таблицей

    modelBuilder.Entity<Model of table>(entity =>
        {
            entity.HasKey(e => e.{Unique column});
            entity.ToTable("Table's Name");
        }
    )
    
...