MVC EF5 Table列按触发器更新但未返回值
我已经在SQL Server表中定义了一列,并使用After Insert Trigger设置了它的值。该值基于最近插入的身份进行计算。但是,保存数据库更改后,我无法在控制器中获取此值。MVC EF5 Table列按触发器更新但未返回值
这里是我的(伪)代码控制器:
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
Column3
属性必须以DatabaseGeneratedOption.Identity
如果你想找回插入过程中你的触发创建的数据来定义。该声明告诉EF,该值在插入时在数据库中创建,并且必须查询该值。
我不希望Column3作为标识。它不能被设置为Computed,因为我在创建新记录之前设置了一个值,后插入触发器进一步更新它。我想在控制器中重新获得这个更新的值。 – Santosh 2013-03-18 06:59:48
EF不支持在应用程序和数据库中设置的值组合。它仅支持在应用程序中完全处理的值或完全在数据库中处理的值。使用当前设置,您将需要使用另一个上下文来再次查询对象(或先从原始上下文中分离它)。 EF不会将您的新值拉入现有对象。 – 2013-03-18 08:13:45
您能否分享您的触发代码请 – RAS 2013-03-16 21:15:27
您是否已将该属性定义为在映射(或带有数据注释)中生成的数据库? – 2013-03-17 11:33:19
@RAS - 我在上面添加了我的触发器代码。 – Santosh 2013-03-17 11:49:31