Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6
Чтобы добавить новый объект в базу данных, необходимо вызвать у таблицы в контексте данных метод InsertOnSubmit() или InsertAllOnSubmit()(если надо добавить список объектов).
string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; DataContext db = new DataContext(connectionString); Console.WriteLine("До добавления"); foreach (var user in db.GetTable<User>().OrderByDescending(u=>u.Id).Take(5)) { Console.WriteLine("{0} \t{1} \t{2}", user.Id, user.FirstName, user.Age); } Console.WriteLine(); // создаем нового пользователя User user1 = new User { FirstName = "Ronald", Age = 34 }; // добавляем его в таблицу Users db.GetTable<User>().InsertOnSubmit(user1); db.SubmitChanges(); Console.WriteLine(); Console.WriteLine("После добавления"); foreach (var user in db.GetTable<User>().OrderByDescending(u => u.Id).Take(5)) { Console.WriteLine("{0} \t{1} \t{2}", user.Id, user.FirstName, user.Age); }
При добавлении генерируется следующее sql-выражение:
INSERT INTO [Users]([Name], [Age]) VALUES (@p0, @p1) SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value] @p0 nvarchar(4000), @p1 int p0='Ronald', @p1=34
Причем данное выражение возвращает id добавленной записи, поэтому после добавления у объекта User мы сможем получить Id:
User user1 = new User { FirstName = "Ronald", Age = 34 }; db.GetTable<User>().InsertOnSubmit(user1); db.SubmitChanges(); Console.WriteLine(user1.Id);
Здесь важно отметить, что если в базе данных значение какого-либо столбца, например, столбца для Id, должно генерироваться автоматически,
то в классе модели атрибут Colunm над соответствующим свойством должен иметь значение IsDbGenerated = true
:
[Column(IsPrimaryKey = true, IsDbGenerated = true)] public int Id { get; set; }