EF未要求的计算字段

时间:2017-07-28 13:43:15

标签: c# sql-server entity-framework sql-server-2012 entity-framework-6

我使用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,但我更愿意理解为什么没有从数据库中请求计算字段。

0 个答案:

没有答案