【发布时间】:2013-03-16 15:26:03
【问题描述】:
我在 SQL Server 表中定义了一个列,并使用插入后触发器设置了它的值。该值是根据最近插入的身份计算的。但是,保存数据库更改后,我无法在 Controller 中获取此值。
这是我在控制器中的(伪)代码:
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
【问题讨论】:
-
你能分享你的触发代码吗
-
您是否将属性定义为在映射中生成的数据库(或带有数据注释)?
-
@RAS - 我在上面添加了我的触发代码。
-
@Ladislav Mrnka - Id 列在我的模型中定义并使用数据注释 [Key] 和 [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
标签: c# entity-framework-5