我目前正在开发我的第一个asp.net mvc 应用程序。我正在尝试从我看到的所有示例项目中汲取灵感,并尝试使用存储库设计模式。
我有一个名为 IUserRepository 的接口,如下所示:
public interface IUserRepository
{
IUser Add(IUser user);
IQueryable<IUser> Fetch();
IUser Update(IUser obj);
void Delete(IUser obj);
}
我的 IUser 界面有一堆属性和 CreatedBy、CreatedDate、ModifiedBy 和 ModifiedDate 的属性。
我的 UserRepository 如下所示:
public class UserRepository : IUserRepository
{
private GimliDataContext db = null;
public UserRepository()
{
db = new GimliDataContext();
}
public UserRepository(string connection)
{
db = new GimliDataContext(connection);
}
public IUser Add(IUser obj)
{
db.Users.InsertOnSubmit((User)obj);
db.SubmitChanges();
return obj;
}
public IQueryable<IUser> Fetch()
{
return db.Users.Select(b => b as IUser);
}
public IUser Update(IUser obj)
{
var user = db.Users.Where(u => u.UserId == obj.UserId).Single();
user.Name = obj.Name;
user.Password = obj.Password;
user.Email = obj.Email;
user.IsLocked = obj.IsLocked;
user.IsDisabled = obj.IsDisabled;
db.SubmitChanges();
return user;
}
public void Delete(IUser obj)
{
var user = db.Users.Where(u => u.UserId == obj.UserId).Single();
db.Users.DeleteOnSubmit(user);
db.SubmitChanges();
}
}
在我当前的 Web 应用程序中,当我的用户登录时,我将我的客户业务主体存储在当前线程上,当我的业务对象更新时,我只使用当前业务主体的 Identity 属性上的 Name 属性,它工作得很好。
那么我的问题是什么?我应该在我的存储库的 Add 或 Update 方法中做同样的事情,还是实际上将 IUser 引用传递给当前 User 并从那里获取 UserId 会更好?
感谢任何输入!