0

SQL Server テーブルに列を定義し、After Insert トリガーを使用してその値を設定しました。この値は、最近挿入された ID に基づいて計算されます。ただし、データベースの変更が保存された後、コントローラーでこの値を取得できません。

コントローラー内の私の(疑似)コードは次のとおりです。

var model = new model();

model.column1 = abc;
model.column2 = xyz;
model.column3 = "CC";

// db object below is a model inheriting DbContext

db.table.Add(model);
db.SaveChanges();

// Do some operations not related to this table

// Try retrieving value of column3 
// which should have been updated by the after insert trigger

var column3Value = db.table.find(model.id).column3;

ここで見逃している EF5 の側面は何ですか?

以下は私のトリガーコードです:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[SetColumn3]
ON [dbo].[Table]
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON
    UPDATE Table
    SET Column3 = RTRIM(inserted.Column3) + CAST(inserted.Id + 100 AS nvarchar(10))
    FROM inserted
    WHERE Table.Id = inserted.Id;
END
4

1 に答える 1

1

Column3DatabaseGeneratedOption.Identity挿入中にトリガーによって作成されたデータを取得する場合は、プロパティを定義する必要があります。この宣言は、挿入中に値がデータベースに作成され、値をクエリする必要があることを EF に通知します。

于 2013-03-17T14:31:18.817 に答える