我有点惊讶地发现,关于下面的问题我没有找到任何信息,所以如果我在文档中错过了,请谅解。使用SQL Server(2016本地和Azure)和EFCore Code First,我们尝试创建一个具有持久值的计算表列。创建列可以正常工作,但是我不知道如何保留值。以下是我们的操作:
modelBuilder.Entity<SomeClass>(entity =>
{
entity.Property(p => p.Checksum)
.HasComputedColumnSql("(checksum([FirstColumnName], [SecondColumnName]))");
});
以下是我们希望在T-SQL中实际获得的内容:
CREATE TABLE [dbo].[SomeClass]
(
[FirstColumnName] [NVARCHAR](10)
, [SecondColumnName] [NVARCHAR](10)
, [Checksum] AS (CHECKSUM([FirstColumnName], [SecondColumnName])) PERSISTED
);
有人能指引我正确的方向吗?
提前感谢您,Tobi
更新:根据@ jeroen-mostert的好主意,我也尝试将PERSISTED
字符串作为公式的一部分传递:
modelBuilder.Entity<SomeClass>(entity =>
{
entity.Property(p => p.Checksum)
.HasComputedColumnSql("(checksum([FirstColumnName], [SecondColumnName]) PERSISTED)");
});
还有圆括号之外的部分:
modelBuilder.Entity<SomeClass>(entity =>
{
entity.Property(p => p.Checksum)
.HasComputedColumnSql("(checksum([FirstColumnName], [SecondColumnName])) PERSISTED");
});
然而出乎意料的是,计算列仍然生成了
Is Persisted = No
,因此 PERSISTED
字符串似乎被忽略了。
PERSISTED
(尽管我只尝试过使用DATEADD计算,而没有尝试使用CHECKSUM)。 - Jeremy Cook