Let's say I have two tables
RDB_DataEntities
DataEntityId
Name
Created
Modified
...
RDB_DataInstances
DataInstanceId
DataEntityId
So RDB_DataInstances
is joined to RDB_DataEntities
via a foreign key on their DataEntityId
columns.
Let's say I want to insert data into both tables in the same transaction. The code I have for this is as follows:
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();
}
}
Why is it throwing a foreign key error
The INSERT statement conflicted with the FOREIGN KEY constraint 'FK_RDB_DataInstances_RDB_DataEntities'. The conflict occurred in database 'NMSS_CMS', table 'dbo.RDB_DataEntities', column 'DataEntityId'.
Shouldn't the transaction know that I am inserting the foreign key based upon an insert I just did within the current transaction context? Am I way off?
How do you make this happen?