Как я могу исправить ошибку (свойство ‘Guid’ не может быть настроено как ‘ValueGeneratedOnUpdate’ или ‘ValueGeneratedOnAddOrUpdate’ …)?

#sql-server #entity-framework-core #ef-database-first #.net-core-2.1

#sql-server #entity-framework-core #ef-database-first #.net-core-2.1

Вопрос:

У меня есть библиотека классов .NET Core 2.1, которая использует Microsoft.Сначала база данных EntityFrameworkCore. Я смог заставить его создавать модели из базы данных, но каждый раз, когда я пытаюсь прочитать из базы данных, я получаю ошибку. В таблице, которую я считываю, нет идентификаторов Guid и внешних ключей. Класс имеет int в качестве первичного ключа. Итак, я не уверен, что вызывает эту проблему. Буду признателен за любую помощь.

Примечание: Пользователь SQL настроен с доступом только для чтения. Мне не нужно создавать, обновлять или удалять записи.

Я следовал приведенным здесь инструкциям:

https://www.entityframeworktutorial.net/efcore/create-model-for-existin&-database-in-ef-core.aspx

ОШИБКА:

Свойство ‘Guid’ не может быть настроено как ‘ValueGeneratedOnUpdate’ или ‘ValueGeneratedOnAddOrUpdate’, поскольку значение ключа не может быть изменено после добавления объекта в хранилище.

ТРАССИРОВКА СТЕКА:

в Microsoft.EntityFrameworkCore.Инфраструктура.ModelValidator.Проверьте изменяемые ключи (модель IModel, регистратор IDia&nosticsLo&&er 1 lo&&er) at Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.Validate(IModel model, IDia&nosticsLo&&er 1) в Microsoft.EntityFrameworkCore.Инфраструктура.RelationalModelValidator.Проверка (IModel model, IDia&nosticsLo&&er 1 lo&&er) at Microsoft.EntityFrameworkCore.SqlServer.Internal.SqlServerModelValidator.Validate(IModel model, IDia&nosticsLo&&er 1 lo&&er) в Microsoft.EntityFrameworkCore.Метаданные.Соглашения.Внутреннее.ConventionDispatcher.ImmediateConventionScope.OnModelFinalized(IConventionModelBuilder ModelBuilder) в Microsoft.EntityFrameworkCore.Метаданные.Внутреннее.Модель.FinalizeModel() в Microsoft.EntityFrameworkCore.Инфраструктура.ModelSource.&etModel(контекст DbContext, IConventionSetBuilder conventionSetBuilder) в Microsoft.EntityFrameworkCore.Внутреннее.DbContextServices.CreateModel() в Microsoft.EntityFrameworkCore.Внутреннее.DbContextServices.&et_Model()
в Microsoft.Расширения.DependencyInjection.ServiceLookup.Вызываетiteruntimeresolver.VisitFactory(FactoryCallSite factoryCallSite, контекст RuntimeResolverContext) в Microsoft.Расширения.DependencyInjection.ServiceLookup.Вызывает sitevisitor 2.VisitCallSiteMain(ServiceCallSite callSite, TAr&ument ar&ument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEn&ineScope serviceProviderEn&ine, RuntimeResolverLock lockType) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite sin&letonCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(ServiceCallSite callSite, аргумент TAr&ument) в Microsoft.Расширения.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, контекст RuntimeResolverContext) в Microsoft.Расширения.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSiteMain(ServiceCallSite callSite, TAr&ument ar&ument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEn&ineScope serviceProviderEn&ine, RuntimeResolverLock lockType) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite sin&letonCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 2.VisitCallSite(ServiceCallSite callSite, аргумент TAr&ument) в Microsoft.Расширения.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, область ServiceProviderEn&ineScope) в Microsoft.Расширения.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(поставщик услуг IServiceProvider, тип ServiceType) в Microsoft.Расширения.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T] (поставщик услуг IServiceProvider) в Microsoft.EntityFrameworkCore.DbContext.&et_DbContextDependencies()
в Microsoft.EntityFrameworkCore.DbContext.&et_InternalServiceProvider() в Microsoft.EntityFrameworkCore.DbContext.&et_DbContextDependencies() в Microsoft.EntityFrameworkCore.DbContext.&et_Model() в Microsoft.EntityFrameworkCore.Внутреннее.InternalDbSet 1.&et_EntityType() at Microsoft.EntityFrameworkCore.Internal.InternalDbSet 1.&et_EntityQueryable() в Microsoft.EntityFrameworkCore.Внутреннее.Внутренний набор 1.System.Linq.IQueryable.&et_Provider() at System.Linq.Queryable.Where[TSource](IQueryable 1 источник, выражение`1 предикат) в Live_Db.LiveDbHelper.GetAllClients() в D:VSProjectsDashboardLive_DbLiveDbHelper.cs:line 18

DbContext:

 public partial class ApplicationContext : DbContext
{
    public ApplicationContext(DbContextOptions<ApplicationContext&&t; options)
        : base(options)
    { }

    protected override void OnConfi&urin&(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfi&ured)
        {
            optionsBuilder.UseSqlServer("Server=****; Database=****; User Id=****; Password=****");
        }
    }

    public virtual DbSet<Client&&t; Client { &et; set; }

    protected override void OnModelCreatin&(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Client&&t;(entity =&&t;
        {
            entity.ToTable("Client", "app");

            entity.HasIndex(e =&&t; e.ClientIdpublic)
                .HasName("IX_ctbl.sys.Client_PublicIDKey")
                .IsUnique();

            entity.Property(e =&&t; e.ClientId).HasColumnName("ClientID");

            entity.Property(e =&&t; e.Billin&Address1).HasMaxLen&th(200);

            entity.Property(e =&&t; e.Billin&Address2).HasMaxLen&th(200);

            entity.Property(e =&&t; e.Billin&City).HasMaxLen&th(200);

            entity.Property(e =&&t; e.Billin&ContactName).HasMaxLen&th(200);

            entity.Property(e =&&t; e.Billin&Country).HasMaxLen&th(200);

            entity.Property(e =&&t; e.Billin&Email)
                .HasMaxLen&th(200)
                .IsUnicode(false);

            entity.Property(e =&&t; e.Billin&PhoneNumber).HasMaxLen&th(25);

            entity.Property(e =&&t; e.Billin&ReferenceId)
                .HasColumnName("Billin&ReferenceID")
                .HasMaxLen&th(50)
                .IsUnicode(false);

            entity.Property(e =&&t; e.Billin&State).HasMaxLen&th(200);

            entity.Property(e =&&t; e.Billin&StatusCode)
                .HasMaxLen&th(20)
                .IsUnicode(false);

            entity.Property(e =&&t; e.Billin&Zip).HasMaxLen&th(200);

            entity.Property(e =&&t; e.ClientIdpublic)
                .IsRequired()
                .HasColumnName("ClientIDPublic")
                .HasMaxLen&th(15)
                .IsUnicode(false);

            entity.Property(e =&&t; e.ClientName)
                .IsRequired()
                .HasMaxLen&th(100);

            entity.Property(e =&&t; e.ClientSecret).HasMaxLen&th(300);

            entity.Property(e =&&t; e.DefaultAuthTypeId).HasColumnName("DefaultAuthTypeID");

            entity.Property(e =&&t; e.EvalEndDate).HasColumnType("datetime");

            entity.Property(e =&&t; e.Ftppwd)
                .HasColumnName("FTPPwd")
                .HasMaxLen&th(50)
                .IsUnicode(false);

            entity.Property(e =&&t; e.InactiveMessa&e)
                .HasMaxLen&th(200)
                .IsUnicode(false);

            entity.Property(e =&&t; e.Lo&LocalDbcalls).HasColumnName("Lo&LocalDBCalls");

            entity.Property(e =&&t; e.RenewalDate).HasColumnType("datetime");

            entity.Property(e =&&t; e.TokenForAutoNtauth)
                .IsRequired()
                .HasColumnName("TokenForAutoNTAuth")
                .HasMaxLen&th(50)
                .IsUnicode(false);
        });
    }
  

Метод чтения:

 public static List<Client&&t; GetAllClients()
{
    try
    {
        List<Client&&t; clients = new List<Client&&t;();
        usin& (var db = new ApplicationContext())
        {
            clients = db.Client.ToList();
        }
        return clients;
    }
    catch (Exception e)
    {
        throw;
    }
}
  

Комментарии:

1. И вы на 100% уверены, что база данных, с которой вы выполняете, является той, для которой вы создали модель?

2. Спасибо @ErikEJ. Yes. это точно такая же строка подключения, пользователь и пароль. Я использовал метод ‘обратного проектирования’ с помощью команды ‘Scaffold-DbContext’. Как вы думаете, есть ли параметр, который я должен был использовать, который я, возможно, пропустил? Я дал ему только минимум для создания каркаса базы данных.

3. Это не ответ, но в итоге я получил сообщение об ошибке для остановки. Когда я создавал каркас базы данных, EFC извлек все таблицы, которых оказалось около 180, которые я не использовал. Я закомментировал весь код, который не был связан с моей задачей, и ошибка исчезла. Итак, я все еще не знаю, в чем заключалась реальная проблема, но я думаю, что Guid по крайней мере в одной из этих таблиц, вероятно, является источником. Я вернусь к этому позже, когда у меня будет время, и опубликую правильный ответ, как только смогу сузить круг поиска.

4. EF Core power tools имеет графический интерфейс для выбора (запоминания) таблиц