LINQ to SQL будет обрабатывать это для вас, если ваши таблицы имеют отношение внешнего ключа.
Если вы хотите использовать дизайнер Visual Studio Studios, вы можете выполнить следующие шаги
Сначала перетащите связанные таблицы в свой конструктор, и установление отношений «один ко многим» будет установлено путем добавления свойства коллекции UserAddress к классу User.
Это позволит вам создать объект UserAddress и добавить его в ваш объект User, затем сохранить объект User, LINQ to SQL будет затем обрабатывать поиск и вставку необходимых первичных ключей как часть транзакции
User user = new User();
user.FirstName = "Foo";
user.LastName = "Bar";
UserAddress userAddress = new UserAddress();
userAddress.Line1 = "22";
userAddress.Line2 = "Acacia Ave";
userAddress.Postcode = "E13 9AZ";
user.UserAddresses.Add(userAddress);
db.Users.InsertOnSubmit(user);
db.SubmitChanges();
В сокращенной версии sql, созданной во время отправки изменений, вы можете видеть, что оба обновления таблиц содержатся в одной транзакции и поэтому будут откатываться, если во время выполнения возникнет ошибка (вы можете запустить профилировщик для своего дБ для более глубокого просмотра sql выполнено).
BEGIN TRANSACTION
INSERT INTO [dbo].[UserAddresses]([UserID], [Line1], [Line2], [Postcode]) VALUES (@p0, @p1, @p2, @p3)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
exec sp_executesql N'INSERT INTO [dbo].[UserAddresses]([UserID], [Line1], [Line2], [Postcode]) VALUES (@p0, @p1, @p2, @p3)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 int,@p1 nchar(10),@p2 nchar(10),@p3 nchar(10)',@p0=3,@p1=N'22 ',@p2=N'Acacia Ave',@p3=N'E13 9AZ '
INSERT INTO [dbo].[Users]([FirstName], [LastName]) VALUES (@p0, @p1)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
exec sp_executesql N'INSERT INTO [dbo].[Users]([FirstName], [LastName]) VALUES (@p0, @p1)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nchar(10),@p1 nchar(10)', @p0=N'Foo ',@p1=N'Bar
COMMIT TRANSACTION