3

次のような計算列を含む SQL データベースにテーブルがあります。

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

型プロバイダーが計算フィールドを指定しようとするのを防ぐ方法はありますか?

4

2 に答える 2

0

あなたのデザインは第 2 正規形に違反していると思います。より良いデザインは、実行時に Rate と Quantity と計算された「オブジェクト プロパティ」の 2 つのフィールドだけをテーブルに残すことだと思います。

于 2013-07-16T17:46:14.500 に答える