1

モデルファーストのアプローチを使用して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

最後の 2 つの列は計算列でありStoreGeneratedPattern、モデルでは として定義されていComputedます。

モデルに計算列の数式を追加する方法はありますか? SQL スクリプトはテーブルを削除してから再作成するため、これらの列を「無視」することはできません。

4

1 に答える 1

0

Microsoft の開発者センターから次のような回答がありました (完全なスレッドはこちらをご覧ください) 。

基本的に、答えはバグではなく、単にサポートされていないということです:

モデル優先とデータベース優先を混在させることはできません。データベースを手動で変更すると、EDMX からデータベースを生成する機能は使用できなくなります。UDF ベースの計算列情報は SSDL に格納され、CSDL はそれについて何も知らないため、EDMX ファイルからデータベースを生成するたびに、特別な列が通常の列として生成されます。

したがって、計算列と UDF を使用する場合は、データベース ファーストが唯一の選択肢です。

私は答えに満足しているとは言えません.EFモデルファーストは私のプロジェクトのほとんどで役に立たないことを意味しますが、それはまさにその通りです.

どんなコメントでも大歓迎です。

于 2012-10-26T19:29:55.117 に答える