Moh*_*san 2 linq 3-tier .net-3.5 c#-3.0
目前我正在设计我的学位项目.几天前我开始学习LINQ.我发现它很有意思并计划在我的项目中使用它,但现在我在某些方面感到困惑.
当我添加LINQ to SQL类时,它会自动为数据库中的每个表生成实体类.
假设我在数据库中有两个表:
用户
项目
UserProjects(联合表)
以及表示哪个用户与哪个项目相关联的联合表.
LINQ to SQL类自动为我生成这三个类.现在我应该创建单独的(用户和项目)类作为业务对象还是使用这些自动生成的实体?
此外,要使用数据库功能,我们需要使用3层架构.我可以直接从我的BLL调用LINQ DAL方法,还是需要创建单独的DAL,它将调用LINQ DAL的方法?
class UserBLL
{
public void saveUser(String username, String password)
{
// here I am calling LINQ DAL from by BLL
UserDataContext db = new UserDataContext();
User u =new User {Username = username, Password = password};
db.user.InsertOnSubmit(u);
db.SubmitChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
以上方法调用序列是否正常?
Linq To SQL非常适合单层设计.对于断开连接的模型或多层环境来说并不是那么好.
上面的代码只将一个User插入数据库.如果启动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,...)
Run Code Online (Sandbox Code Playgroud)
要更新用户,您的代码应该看起来像
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
}
Run Code Online (Sandbox Code Playgroud)
每次执行一个工作单元时,都应该确保使用数据库合同.(因为默认情况下使用事务的数据库上下文,这可能会变得很难看,不要为构建数据库上下文而烦恼!)
通常,当您使用多层环境时,您将通过线路(网络)传递它们时创建单独的POCO.
NCommon是Linq to Sql的一个很好的抽象,应该处理业务验证和规则.
注意.在数据库中散列密码值的良好做法.
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |