我使用EF 6.1.3访问SQL Server 2012或localdb数据库中的数据。
在我的一个表中,我有一个非常简单的计算字段(Id + 12,000),以便为用户提供可显示的值。
在原始SQL中访问时,列中的值是预期的。但是,当通过EF访问时,该值始终为0.
在查看生成的SQL时,从DB请求的字段不是,这将解释默认值。
代码段:
C#:
public class Pharmacist : IAuditableEntity
{
//...Snip....
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[Display(Name = "Pharmacist Number")]
public int PharmacistNumber { get; }
//...Snip....
}
SQL:
ALTER TABLE Pharmacists
ADD PharmacistNumber
AS CAST(12000 AS INT) + Id // Id is INT Primary Key Identity (1,1)
PERSISTED
生成的SQL(注意没有PharmacistNumber字段):
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Attended] AS [Attended],
[Extent1].[Cancelled] AS [Cancelled],
[Extent1].[Created] AS [Created],
[Extent1].[CreatedBy] AS [CreatedBy],
[Extent1].[EventId] AS [EventId],
[Extent1].[Invoiced] AS [Invoiced],
[Extent1].[OrderNumber] AS [OrderNumber],
[Extent1].[PackageDescription] AS [PackageDescription],
[Extent1].[PackageId] AS [PackageId],
[Extent1].[PharmacistId] AS [PharmacistId],
[Extent1].[Price] AS [Price],
[Extent1].[PriceCode] AS [PriceCode],
[Extent1].[PriceDescripton] AS [PriceDescripton],
[Extent1].[Registered] AS [Registered],
[Extent1].[Updated] AS [Updated],
[Extent1].[UpdatedBy] AS [UpdatedBy]
FROM [dbo].[Registrations] AS [Extent1]
WHERE [Extent1].[PharmacistId] = @EntityKeyValue1
-- EntityKeyValue1: '1' (Type = Int32, IsNullable = false)
我已尝试使用PERSISTED
以及添加set;
。前者没有区别后者使EF想要运行迁移来添加一个列,由于它已经存在而失败。
似乎我一定做错了,因为它看起来应该有效。
如果做不到这一点,我可以回到12000处播种Id,但我更愿意理解为什么没有从数据库中请求计算字段。