Subsonic 当列不是表中的第一列时检索自动增量键值

Subsonic 当列不是表中的第一列时检索自动增量键值,subsonic,subsonic2.2,Subsonic,Subsonic2.2,在SQLServer2005中,当列不是表中第一个声明的列时,我有一个关于如何检索列的自动增量或标识值的问题 我只需发出以下代码即可获得表的生成值: MyTable newRecord = new MyTable(); newRecord.SomeColumn = 2; newRecord.Save(); return newRecord.MyIdColumn; 这可以很好地考虑到有多少其他列构成该特定表的主键,但是声明的第一列必须是标识列,否则这不起作用 我的问题是,我必须将我的代码与我接触

在SQLServer2005中,当列不是表中第一个声明的列时,我有一个关于如何检索列的自动增量或标识值的问题

我只需发出以下代码即可获得表的生成值:

MyTable newRecord = new MyTable();
newRecord.SomeColumn = 2;
newRecord.Save();
return newRecord.MyIdColumn;
这可以很好地考虑到有多少其他列构成该特定表的主键,但是声明的第一列必须是标识列,否则这不起作用

我的问题是,我必须将我的代码与我接触不到的其他表集成,而这些表中的标识列不是这些表中的第一列,因此我想知道是否有一个适当的解决方法来解决我的问题,或者我是否一直在使用类似SELECT@@identity的东西来手动获取该值

非常感谢您的帮助

来自“EWW gross”部门:

这是我目前的解决方法,希望有人能为我所做的事情提出更好的解决方案

MyTable newRecord = new MyTable();
newRecord.SomeColumn = 2;
newRecord.Save();
CodingHorror horror = new CodingHorror();
string SQL = "SELECT IDENT_CURRENT(@tableName)";
int newId = horror.ExecuteScalar<int>(SQL, "MyTable");
newRecord.MyIdColumn = newId;
newRecord.MarkClean();
return newRecord.MyIdColumn;
MyTable newRecord=newmytable();
newRecord.SomeColumn=2;
newRecord.Save();
Codinghoror恐怖=新的Codinghoror();
string SQL=“选择当前标识(@tableName)”;
int newId=horror.ExecuteScalar(SQL,“MyTable”);
newRecord.MyIdColumn=newId;
MarkClean();
返回newRecord.myid列;

SubSonic不会按顺序位置设置关键点-如果您使用的是2.2,则在保存后,SetPrimarykey方法将关闭,并询问模式要设置哪个道具。所以,问题是,“不起作用”是什么意思?你有错误吗?没有,一点错误都没有。“不工作”意味着,如果我有一个包含两个int列的表,col1和col2,并且只有col2是identity,那么当我执行.Save()并检查col2的值时,它返回0而不是刚刚生成的键值。如果我将col2作为第一列而不是col1移动,并执行与前面相同的代码,则正确返回生成的键值。我已经尝试了很多次,它总是给我一致的结果;我必须将我的标识列作为第一列,否则我无法访问最近插入的记录的键值。