参见英文答案 > Entity Framework not including columns with default value in insert into query 2个
我正在使用EF Core 2.0.我有一个包含4列的表格,其中PK由所有4列组成.其中一列(IsDefault)是数据库中的位字段.如果我插入一个IsDefault设置为true的记录,一切正常.如果我将IsDefault设置为false的记录插入,则会出现以下异常:System.NotSupportedException occurred HResult=0x80131515 Message=The 'IsDefault' on entity type 'ChromeMileageRestrictionTest' does not have a value set and no value generator is available for properties of type 'bool'. Either set a value for the property before adding the entity or configure a value generator for properties of type 'bool'. Source=<Cannot evaluate the exception source> StackTrace: at Microsoft.EntityFrameworkCore.ValueGeneration.ValueGeneratorSelector.Create(IProperty property, IEntityType entityType) at Microsoft.EntityFrameworkCore.ValueGeneration.RelationalValueGeneratorSelector.Create(IProperty property, IEntityType entityType) at Microsoft.EntityFrameworkCore.ValueGeneration.Internal.SqlServerValueGeneratorSelector.Create(IProperty property, IEntityType entityType) at Microsoft.EntityFrameworkCore.ValueGeneration.ValueGeneratorSelector.<>c__DisplayClass6_0.<Select>b__0(IProperty p, IEntityType e) at Microsoft.EntityFrameworkCore.ValueGeneration.ValueGeneratorCache.<>c.<GetOrAdd>b__3_0(CacheKey ck) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at Microsoft.EntityFrameworkCore.ValueGeneration.ValueGeneratorCache.GetOrAdd(IProperty property, IEntityType entityType, Func`3 factory) at Microsoft.EntityFrameworkCore.ValueGeneration.ValueGeneratorSelector.Select(IProperty property, IEntityType entityType) at Microsoft.EntityFrameworkCore.ValueGeneration.Internal.SqlServerValueGeneratorSelector.Select(IProperty property, IEntityType entityType) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ValueGenerationManager.Generate(InternalEntityEntry entry) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState entityState, Boolean acceptChanges, Boolean forceStateWhenUnknownKey) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.PaintAction(EntityEntryGraphNode node) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityEntryGraphIterator.TraverseGraph(EntityEntryGraphNode node, Func`2 handleNode) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.EntityGraphAttacher.AttachGraph(InternalEntityEntry rootEntry, EntityState entityState, Boolean forceStateWhenUnknownKey) at Microsoft.EntityFrameworkCore.DbContext.SetEntityState(InternalEntityEntry entry, EntityState entityState) at Microsoft.EntityFrameworkCore.DbContext.SetEntityState[TEntity](TEntity entity, EntityState entityState) at Microsoft.EntityFrameworkCore.DbContext.Add[TEntity](TEntity entity) at DAL.Tests.UnitTest1.TestMethod1() in C:\Users\jkruer\Source\Repos\JLM.App.ChromeIncentivesService\DAL.Tests\UnitTest1.cs:line 12
我创建了一个非常简化的版本,并能够使用我的单个表,单个实体,单个记录,单个单元测试实现来重现问题.
我的数据库表:
CREATE TABLE [dbo].[ChromeMileageRestrictionTEST]( [TermID] [varchar](50) NOT NULL, [Mileage] [varchar](50) NOT NULL, [Residual] [decimal](18, 8) NOT NULL, [isDefault] [bit] NOT NULL, CONSTRAINT [PK_ChromeMileageRestrictionTEST] PRIMARY KEY CLUSTERED ( [TermID] ASC, [Mileage] ASC, [Residual] ASC, [isDefault] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[ChromeMileageRestrictionTEST] ADD CONSTRAINT [DF_ChromeMileageRestrictionTEST_Residual] DEFAULT ((0)) FOR [Residual] GO ALTER TABLE [dbo].[ChromeMileageRestrictionTEST] ADD CONSTRAINT [DF_ChromeMileageRestrictionTEST_isDefault] DEFAULT ((0)) FOR [isDefault] GO
我的dbContext:
public partial class ReportingContext : DbContext { public ReportingContext() { } public Virtual DbSet<ChromeMileageRestrictionTest> ChromeMileageRestriction { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"MyConnectionStringGoesHere"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<ChromeMileageRestrictionTest>(entity => { entity.HasKey(e => new { e.TermId, e.Mileage, e.Residual, e.IsDefault }) .HasName("PK_ChromeMileageRestrictionTest"); entity.Property(e => e.TermId) .HasColumnName("TermID") .HasMaxLength(50) .IsUnicode(false); entity.Property(e => e.Mileage) .HasMaxLength(50) .IsUnicode(false); entity.Property(e => e.Residual) .HasColumnType("decimal(18, 8)") .HasDefaultValueSql("((0))"); entity.Property(e => e.IsDefault) .HasColumnName("isDefault") .HasDefaultValueSql("((0))"); }); } }
我的实体:
public partial class ChromeMileageRestrictionTest { public string TermId { get; set; } public string Mileage { get; set; } public decimal Residual { get; set; } public bool IsDefault { get; set; } }
我的单元测试:
[TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { var dbContext = new ReportingContext(); dbContext.Add(new ChromeMileageRestrictionTest { TermId = "6078915-0-0", Mileage = "15,000", Residual = 45.00000000M, IsDefault = true //THIS WORKS }); dbContext.Add(new ChromeMileageRestrictionTest { TermId = "6078915-0-0", Mileage = "15,000", Residual = 45.00000000M, IsDefault = false //THIS THROWS AN EXCEPTION }); dbContext.SaveChanges(); } }
我一直在这个问题上摸不着头脑.我无法弄清楚.任何帮助将不胜感激!
谢谢!
重复: Entity Framework not including columns with default value in insert into queryTLDR:我从数据库和DbContext映射中删除了IsDefault字段的默认值False.这解决了这个问题.
查看更多关于在C#中EF Core 2.0 – System.NotSupportedException On添的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did69446