Linq To SQL отлично подходит для одноуровневого проектирования. Не так хорошо для отключенной модели или многоуровневой среды .
Приведенный выше код вставляет в базу данных только одного пользователя. Если вы запустите MSSQL SQL Server Profiler или подключите журнал к выходу в Visual Studio. Вы должны увидеть
//Hookup the log to the output in visual studio
using (var db = new UserDataContext()) {
db.Log = Console.Out;
}
INSERT INTO User VALUES (value1, value2, value3,...)
Чтобы обновить пользователя, ваш код должен выглядеть примерно так:
public void UpdateUser(String username, String password, int userId)
{
using (var db = new UserDataContext()) {
//Get Row From Database Marching Id
var user = db.user.Single(p => p.Id = userId);
//Update Values
user.Username = username;
user.Password = password;
//Save To The Database
db.SubmitChanges();
}
}
//Get All Users From Database
public IEnumerable<User> GetAllUsers()
{
using (var db = new UserDataContext()) {
//Get Row From Database Matching Id
var users = from user in db.user
select user;
return users.ToList();
}
}
//To display the data just enumerate through the enumeration that is returned.
var users = BusinessInstance.GetAllUsers();
foreach (var user in users) {
//user is the current item
}
Вы должны подписывать контракт с базой данных каждый раз, когда выполняете единицу работы. (поскольку контекст базы данных использует транзакцию по умолчанию, и это может показаться уродливым, не беспокойтесь о производительности при создании контекста базы данных! )
Обычно, когда вы работаете с многоуровневой средой, вы создаете отдельные POCO при их передаче по проводам (сети).
NCommon - отличная абстракция для Linq to Sql, должна обрабатывать бизнес-валидацию и правила.
Примечание. Рекомендуется использовать значения хеш-пароля в базе данных.
Посетите блог ScottGu, где вы сможете быстро получить ответы на вопросы и ознакомиться с основными вопросами linq