2013-07-16 101 views
3

我有一個表,其中包含一個計算列一個SQL數據庫,類似如下:計算列和Microsoft.FSharp.Data.TypeProviders.SqlDataConnection

CREATE TABLE MyTable 
(
Rate  decimal(10,5) NOT NULL, 
Quantity int   NOT NULL, 
Cost as Quantity * Rate 
) 

當我試圖插入一行到這表使用Microsoft.FSharp.Data.TypeProviders.SqlDataConnection類型提供程序,它會失敗,並顯示錯誤「列」Cost「無法修改,因爲它是計算列或是UNION運算符的結果。」

對應生成的SQL是:

INSERT INTO [MyTable]([Rate], [Quantity], [Cost]) 
VALUES (@p0, @p1, @p2) 

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value] 
-- @p0: Input Decimal (Size = -1; Prec = 10; Scale = 5) [99.77] 
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [1000000] 
-- @p2: Input Decimal (Size = -1; Prec = 21; Scale = 5) [Null] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.17929 

有什麼辦法來防止類型提供商從試圖指定計算字段?

回答

0

我相信你的設計違反了Second Normal Form我認爲一個更好的設計是讓你的表只有兩個字段:運行時的速率和數量以及計算的「對象屬性」。