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<> のクラスはどれですか。私は何日も探し回っていましたが、この問題を解決する答えが見つかりませんでした。
上記の私のようなテーブルモデルを一般化することは本当に不可能ですか? または、同じコードを繰り返し記述しないようにする他の方法はありますか? 誰でも、私を助けてください.. :(