Скажем, у меня есть две таблицыTSQL Вставка данных Linked внешнего ключа
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 заявление противоречило с ограничением внешнего ключа «FK_RDB_DataInstances_RDB_DataEntities». Конфликт произошел в базе данных «NMSS_CMS», таблице «dbo.RDB_DataEntities», в столбце «DataEntityId».
Не должно ли транзакция знать, что я вставляю внешний ключ на основе вставки, которую я только что сделал в контексте текущей транзакции? Я в отъезде?
Как вы это делаете?
Это не происходит на вашем первом «INSERT», не так ли? То есть, вы не настроили FK неправильно ... –