在我的数据库中,我的所有表都有5个重复字段(CreateUser,UpdateUser,IsRemoved ......)
现在,我通常将DbContext称为:
mydbEntities db = new mydbEntities();
然后,当我需要调出所有students
和所有classes
时,我将其正常称为:
var students = db.students;
var classes = db.classes;
BUT!由于我不得带有列IsRemoved == true
的那些,我在我的应用中的所有地方都重写为:
var students = db.students.Where(m => m.IsRemoved == false);
var classes = db.classes.Where(m => m.IsRemoved == false);
为了避免在替换现有代码时出现错误和错误,当脚手架创建新控制器,而其他开发人员忘记添加Where()时,让我想知道是否可以覆盖调用db.students
以便在内部,它总是添加Where()
这也将在将来有所帮助,因此当我致电db.students.Include(s => s.classes)
时,IsRemoved
被考虑在内,即使学生存在,如果该课程已被删除,那么它赢了& #39; t在列表中返回它。
答案 0 :(得分:2)
这就是为什么我认为拥有Repository类 - 对于数据库访问层 - 总是一个好主意。所以你永远不必直接访问你的$pass = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['pass']);
$pass = md5($pass);
$npass = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['npass']);
$npass2 = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['npass2']);
if(empty($pass))
{
die(msg(0,"Type in your current password"));
}
elseif($pass != $current)
{
die(msg(0,"<div>Your current password is incorrect</div>"));
}
elseif(empty($npass))
{
die(msg(0,"<div>Type new password</div>"));
}
elseif($npass < 6)
{
die(msg(0,"<div>Password must be at least 6 characters long</div>"));
}
elseif(empty($npass2))
{
die(msg(0,"<div>Please repeat your new password</div>"));
}
elseif($npass != $npass2)
{
die(msg(0,"<div>Passwords doesnt match</div>"));
}
对象,而是通过一个抽象层,例如。 StudentRepositoy。
dbContext
在这种情况下,您只需在IStudentRepository studentRepository = new StudentRepository(dbContext);
var students = studentRepository.getStudents();
方法中添加Where(m => m.IsRemoved == false)
一次。
我希望您不要在控制器中重复这些查询(我不知道您是否正在使用MVC或其他东西)。查看this教程以获取更多详细信息。
虽然,这不能回答你的问题,但我希望你考虑这些修改。
编辑: 看起来有一种方法可以覆盖documentation
中的dbcontext答案 1 :(得分:1)
您是否考虑在数据库中创建一个考虑IsRemoved标志的视图?
Select * From <tablename> Where IsRemoved = 0
然后将视图添加到DBContext。
只是一个想法。