我有一个以Guid列为主键的实体。
默认为(newsequentialid()
)。因此,如果我传递NULL,它将生成Guid。
现在我将这个数据库与BDC Model Stuff一起使用。问题是这个自动生成的代码在创建新对象的情况下不会为ID传递NULL,而是使用new Guid()
00000000-0000-0000-0000-000000000000
。所以我的默认约束不起作用,我得到一个主键约束违规错误......
因此可以用触发器来捕获这个问题吗?也许首先检查Id是否为0000 ... 0,然后生成一个有效的?
答案 0 :(得分:1)
你可以使用触发器,虽然正如其他人所指出的那样,这将是一个不明智的解决方案,因为在代码和数据之间引入了一个看不见的黑客攻击。您真正的解决方案是更改您的ORM,使其不会尝试直接插入GUID
,因为这是数据库生成的。
所以忽略我的答案的其余部分。
SqlServer不支持BEFORE触发器,但您可以使用
INSTEAD OF TRIGGER
创建触发器可以在某些表上插入插件 AS
BEGIN
INSERT INTO SomeTable(SomeKey,Name)
SELECT
例如,当我.SomeKey ='00000000-0000-0000-0000-000000000000'时 那么newid()ELSE i.SomeKey END,
i.Name
来自INSERTED i;
结束
答案 1 :(得分:0)
传递生成有效Guid的Guid.NewGuid()
。