SQL Server计算列和EF模型优先

时间:2012-10-08 18:05:09

标签: entity-framework calculated-columns ef-model-first

我正在使用模型优先方法使用EF5。我设计了模型并执行了生成相应数据库的SQL脚本(使用“从模型生成数据库”)。

然后我不得不使用UDF来计算几个列值(这需要删除并重新添加列)。我在SSMS中完成了这项工作,然后使用“从数据库更新模型...”来反映模型中的变化。

直到这一点,一切都很顺利。

但是从这一点来说,每当我从模型更新数据库时(如上所述),计算列都会被“标准”列覆盖。

例如,以下是EF生成的SQL脚本的摘录:

-- Creating table 'ShipmentSet'
CREATE TABLE [dbo].[ShipmentSet] (
[Id] int IDENTITY(1,1) NOT NULL,
[Details] nvarchar(128)  NOT NULL,
[BarcodeValue] nvarchar(32)  NOT NULL,
[ExecutionDate] datetime  NOT NULL,
[RouteId] int  NOT NULL,
[IsLocationBarcodeRequired] bit  NOT NULL,
[IsPending] bit  NULL,
[LastAction] tinyint  NULL
);
GO

最后两列是计算列,模型中的StoreGeneratedPattern定义为Computed

有没有办法在模型中添加计算列公式? SQL脚本删除表然后重新创建它们,因此“忽略”这些列将不会这样做。

1 个答案:

答案 0 :(得分:0)

我收到了微软开发人员中心的以下回复(参见完整帖子here

基本上答案是,它不是一个错误,它根本不受支持:

  

您不能混合模型优先和数据库优先。手动修改数据库后,无法再使用EDMX中的Generate database。基于UDF的计算列信息存储在SSDL中,CSDL对此一无所知,因此每次从EDMX文件生成数据库时,特殊列都将生成为常规列。

因此,如果您想使用计算列和UDF,数据库优先是您的唯一选择。

我不能说我对答案感到满意,因为这意味着EF Model-first对于我的大多数项目来说都是无用的,但这就是事情的方式。

欢迎任何评论。