如何使用带有 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 的操作
如何使用带有 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 的操作
我没有重现你的问题,所以我对你的问题没有直接的答案,但是......
使用字符串作为 PK 不是一个好习惯,为什么不使用 INT 主键加上描述列 Varchar 呢?与此表的关系将更快,因为数据库索引整数比文本快得多。
如果您有独特的限制,我认为最好的选择是自己处理验证。验证一个值是否会在表上重复超出了 ORM 的范围。当 ORM 抛出异常时,ORM 正在通过验证供您处理,并由您决定相应的行为。
让我们考虑一下,在执行插入命令之前,您需要验证一个值是否会在数据库上重复... 1. 您必须为每个具有唯一性的列执行 SELECT验证它的约束,它们已经具有即将插入的值。2. 如果没有,请执行 INSERT。3.如果是这样,抛出异常?...这就是现在正在发生的事情...
所以,让它吹吧!:) 准备好让它爆炸(将保存包裹在 Try/Catch 中)并采取相应的行动。
干杯! 亚历克斯