我有一个以Guid列为主键的实体。
默认为(newsequentialid()
)。所以如果我传递NULL,它会生成Guid
现在我使用这个数据库与BDC模型的东西。问题是,这个自动生成的代码不传递NULL的ID与新对象的创建,相反,它可能只使用new Guid()
,即00000000-0000-0000-0000-000000000000
。所以我的默认约束不工作,我得到一个主键约束违反错误…
那么有可能用触发器捕获这个问题吗?也许先检查一下Id是否为0000…然后生成一个有效的?
您可以使用触发器,尽管正如其他人指出的那样,这将是一个不明智的解决方案,因为在代码和数据之间引入了一个看不见的hack。真正的解决方案是更改ORM,使其不尝试直接插入GUID
,因为这是数据库生成的。
所以忽略我的答案的其余部分。
<引用类>SqlServer不支持BEFORE触发器,但您可以使用INSTEAD OF TRIGGER
在SomeTable上创建触发器tSomeTable而不是INSERT
为
开始
INSERT INTO SomeTable(SomeKey, Name)
选择
当i.SomeKey = '0000000 -0000000 -0000000 -0000000 -000000000000'
THEN newid() ELSE i.SomeKey END,
i.Name
FROM insert i;
SqlFiddle
引用类>通过生成有效Guid的Guid.NewGuid()
。