2012-10-08 64 views
1

我正在使用EF5模型優先方法。我設計了模型並執行了生成相應數據庫的SQL腳本(使用「從模型生成數據庫」)。SQL Server計算列和EF模型優先

然後,我不得不使用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腳本刪除表然後重新創建它們,因此「忽略」這些列將不會執行。

回答

0

我從微軟開發中心以下回應(見全螺紋here

本質的答案是,它是不是一個錯誤,它只是不支持:

不能混合模型 - 首先和數據庫優先。一旦你手動修改數據庫,你就不能再使用從EDMX生成數據庫了。基於UDF的計算列信息存儲在SSDL中,CSDL對此一無所知,因此每次從EDMX文件生成數據庫時,都會將特殊列生成爲常規列。

因此,如果您想使用計算列和UDF,Database-first是您唯一的選擇。

我不能說我對答案感到滿意,因爲這意味着EF模型 - 首先對於我的大部分項目來說都是無用的,但事實就是如此。

歡迎任何評論。