Допустим, у меня есть две таблицы
RDB_DataEntities
DataEntityId
Name
Created
Modified
...
RDB_DataInstances
DataInstanceId
DataEntityId
Итак RDB_DataInstances
присоединяется к RDB_DataEntities
через внешний ключ в столбцах DataEntityId
.
Допустим, я хочу вставить данные в обе таблицы в одной транзакции.У меня есть следующий код:
using (var con = new SqlConnection("data source=speedy;initial catalog=mydb;user id=myuser;password=mypass"))
{
con.Open();
using (var tran = con.BeginTransaction())
{
SqlCommand i1 = new SqlCommand("insert into RDB_DataEntities (Name,IsSchema,Created,Modified,RequireCaptcha,UniqueByEmail,UniqueByMac) values ('hi',0,GetDate(),GetDate(),0,0,0)", con, tran);
i1.ExecuteNonQuery();
SqlCommand i2 = new SqlCommand("select SCOPE_IDENTITY() as newid", con, tran);
var id = int.Parse(i2.ExecuteScalar().ToString());
SqlCommand i3 = new SqlCommand("insert into RDB_DataInstances (DataEntityId) values (" + id + ")", con, tran);
i3.ExecuteScalar();
tran.Commit();
}
}
Почему выдается ошибка внешнего ключа
Оператор INSERT конфликтует с ограничением FOREIGN KEY 'FK_RDB_DataInstances_RDB_DataEntities'.Конфликт произошел в базе данных «NMSS_CMS», таблице «dbo.RDB_DataEntities», столбце «DataEntityId».
Разве транзакция не должна знать, что я вставляю внешний ключ на основе вставки, которую я только что сделалав контексте текущей транзакции?Я далеко?
Как ты это сделал?