0

如何使用带有 SQL 2008 后端的 subsonic 执行幂等插入行?

例如

我有一个表“颜色”,其中名称是主键。

Color c = new Color;
c.name = "red";
c.Save;

Color c2 = new Color;
c2.name = "red";
c2.Save; // throws duplicate key error;

我知道我可以捕获错误,但我更愿意在 MySql 中执行类似 REPLACE 的操作

4

2 回答 2

1

我没有重现你的问题,所以我对你的问题没有直接的答案,但是......

使用字符串作为 PK 不是一个好习惯,为什么不使用 INT 主键加上描述列 Varchar 呢?与此表的关系将更快,因为数据库索引整数比文本快得多。

于 2010-03-23T15:40:40.580 回答
1

如果您有独特的限制,我认为最好的选择是自己处理验证。验证一个值是否会在表上重复超出了 ORM 的范围。当 ORM 抛出异常时,ORM 正在通过验证供您处理,并由您决定相应的行为。

让我们考虑一下,在执行插入命令之前,您需要验证一个值是否会在数据库上重复... 1. 您必须为每个具有唯一性的列执行 SELECT验证它的约束,它们已经具有即将插入的值。2. 如果没有,请执行 INSERT。3.如果是这样,抛出异常?...这就是现在正在发生的事情...

所以,让它吹吧!:) 准备好让它爆炸(将保存包裹在 Try/Catch 中)并采取相应的行动。

干杯! 亚历克斯

于 2010-03-24T00:30:11.323 回答