cha*_*tng 9 c# asp.net-mvc entity-framework
当我打电话说需要一种方法dbcontext为update或insert
,但只想要一个saveChange()像以下
行动:登录
TempDBEntity context = new TempDBEntity();
var temp = context.Users.Where(m => m.user_unique_id == 1).FirstOrDefault();
temp.timestamp = new DateTime();
temp.AddLog("Login");
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
功能:AddLog
public void AddLog(string activity){
TempDBEntity context2 = new TempDBEntity();
var log = new UserLog();
log.user_id = this.user_id;
log.activity = activity;
context2.UserLog.Add(log);
context2.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
如你所见,有两倍SaveChanges(),我只需要1 SaveChanges().
我应该DBContext作为另一个参数传递,AddLog()
还是应该dbcontext在这种情况下声明静态变量?
非常感谢.
在你的情况下,我会在你需要的方法中创建一个新的 dabtase 上下文,因为这是最简单的方法,你可以很好地重用你的方法。
这应该不会造成很多性能问题,因为实体框架在数据库上下文中缓存了所有重要信息,因此创建一个新的非常快。
如果您想优化事务量,那么我会编写一种处理程序,它实现自己的SaveChanges方法并为每个实例保存一个数据库上下文。比你多了一个抽象层和一个很好的 API 供以后使用。
这是一个简单的例子:
class UserLogin
{
private TempDBEntity dbContex;
UserLogin()
{
// ctor create dbContext
}
void Login()
{
// Login...
}
void AddLog()
{
// ...
}
void SaveChanges()
{
//dbContext.SaveChanges()...
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,将 dbcontext 作为参数传递不是一个很好的解决方案。但这是基于意见...
小智 5
您可以按如下方式使用 dbcontext:
行动:登录
using(TempDBEntity context = new TempDBEntity())
{
var temp = context.Users.Where(m => m.user_unique_id == 1).FirstOrDefault();
temp.timestamp = new DateTime();
temp.AddLog("Login", context);
}
Run Code Online (Sandbox Code Playgroud)
功能:添加日志
public void AddLog(string activity, TempDBEntity context)
{
var log = new UserLog();
log.user_id = this.user_id;
log.activity = activity;
context.UserLog.Add(log);
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
这将在使用后正确处置该对象。
| 归档时间: |
|
| 查看次数: |
10225 次 |
| 最近记录: |