У меня есть следующий DbContext:
public class TestDbContext : DbContext
{
public DbSet<DatabaseLogEntry> LogEntries { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<DatabaseLogEntry>().ToTable("LogEntryTable");
modelBuilder.Entity<DatabaseLogEntry>().Property(x => x.URL).HasDefaultValueSql("TEST_URL");
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("connection_string");
}
}
И просто попробуйте добавить новую строку (в настоящее время URL-адрес равен нулю)
using(TestDbContext context = new TestDbContext())
{
context.LogEntries.Add(logEntry);
context.SaveChanges();
}
Но столбец «Url» не затронут и установлено значение null. Если я посмотрю на перехваченный запрос sql, сгенерированный EF, количество моих вопросов увеличится :) Почему он сгенерировал только запрос выбора для столбца «URL» без какой-либо вставки ...
exec sp_executesql N'SET NOCOUNT ON;
INSERT INTO [LogEntryTable] ([ID], [EVENT_TYPE], [FLAGS], [MESSAGE], [METHOD], [SERVER], [SEVERITY], [THREAD_ID], [TIME], [USERNAME])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9);
SELECT [URL]
FROM [LogEntryTable]
WHERE @@ROWCOUNT = 1 AND [ID] = @p0;
',N'@p0 bigint,@p1 nvarchar(4000),@p2 bigint,
@p3 nvarchar(4000),@p4 nvarchar(4000),@p5 nvarchar(4000),@p6 nvarchar(4000),@p7 bigint,@p8 datetime2(7),@p9 nvarchar(4000)',@p0=12027,@p1=N'value',@p2=1,
@p3=NULL,@p4=N'value',@p5=N'value',@p6=N'value',@p7=1,@p8='2020-05-27 19:24:38.1512712',@p9=N'value'
Когда я использую метод HasComputedColumnSql
, ситуация аналогичная - в столбец вставляется только нулевое значение. Кто-нибудь может мне помочь?