我在 MVC 模式中的模型设计存在问题,并且我被 C# 的静态类型所困扰。
我想做的只是创建一组执行所有数据库插入、更新、删除操作的类。该组由从数据库中的每个表映射的类的子组和访问表类的表模型类的子组组成。
我正在使用 LINQ 映射来创建表类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq.Mapping;
using Iris.Libraries;
namespace Iris.Models.Tables
{
[Table]
public class Users
{
[Column(IsPrimaryKey = true)]
public string User_Id;
[Column]
public string Name;
[Column]
public string Password;
[Column]
public int Userlevel_Id;
public Users()
{
}
}
}
然后模型类访问的表:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq;
using Iris.Models.Tables;
using Iris.Models.DataContexts;
namespace Iris.Models
{
public class UserModel
{
private UserDataContext dataContext;
private Table<Users> users;
public UserModel()
{
this.dataContext = new UserDataContext(Config.CONNECTION_STRING);
this.users = this.dataContext.GetTable<Users>();
}
public List<Users> Select()
{
var data = from user in this.users select user;
return data.ToList<Users>();
}
public Users Select(object id)
{
var data = from user in this.users where user.User_Id.ToString() == id.ToString() select user;
return data.ToList<Users>()[0];
}
public void Insert (Users user)
{
this.dataContext.Users.InsertOnSubmit(user);
this.dataContext.SubmitChanges();
}
public void Update(Users user)
{
var queryableData = from row in this.dataContext.Users where row.User_Id == user.User_Id select row;
var editedData = queryableData.Single<Users>();
editedData.User_Id = user.User_Id;
editedData.Name = user.Name;
editedData.Password = user.Password;
editedData.Userlevel_Id = user.Userlevel_Id;
this.dataContext.SubmitChanges();
}
public void Delete(Users user)
{
var queryableData = from row in this.dataContext.Users where row.User_Id == user.User_Id select row;
var deletedData = queryableData.Single<Users>();
this.dataContext.Users.DeleteOnSubmit(deletedData);
this.dataContext.SubmitChanges();
}
}
}
上面的一对代码可以正常工作,没有任何问题,但我想避免一次又一次地为模型类编写“几乎相同”的代码,因为数据库中有很多表。为了达到这个目的,我尝试制作一个通用的模型类,并从它扩展每个表模型。
public class Users : Model {}
问题来自
private Table<Users> users;
Table<> 中的哪个类对于每个表总是不同的。我一直在寻找几天,并没有找到解决这个问题的任何答案。
像我上面那样概括表格模型真的不可能吗?还是有其他方法可以避免重复编写相同的代码?任何人,请帮助我.. :(