水平分割数据表

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Linq.Expressions;
  6 namespace Model
  7 {
  8     public interface  ITable
  9     {
 10         int ID
 11         {
 12             get;
 13             set;
 14         }
 15         string Name
 16         {
 17             get;
 18             set;
 19         }
 20         System.Nullable<int> Age
 21         {
 22             get;
 23             set;
 24         }
 25     }
 26 
 27     public partial class TableA : ITable
 28     {
 29     }
 30     public partial class TableB : ITable
 31     {
 32     }
 33     public partial class TableC : ITable
 34     {
 35     }
 36 
 37     public enum TableType
 38     {
 39         TableA,
 40         TableB,
 41         TableC
 42     }
 43 
 44     // 对于3个表结构一样,编写共用的方法
 45     public class TableX
 46     {
 47         protected static CoreDataContext Core=new CoreDataContext();        
 48         public TableX(TableType tabletype)
 49         {
 50             type=tabletype;
 51         }
 52         private TableType type;
 53         public  IQueryable<ITable> GetList()//协变引用 
 54         {
 55            switch (type)
 56             {
 57                 case TableType.TableA:
 58                        return Core.TableAs;
 59                 case TableType.TableB:
 60                        return Core.TableBs;
 61                 case TableType.TableC:
 62                        return Core.TableCs;                      
 63                 default:
 64                        return null;
 65             }
 66         }
 67 
 68         public  ITable Get(int id)
 69         {
 70             return GetList().FirstOrDefault(o => o.ID==id);
 71         }
 72         public ITable Set(string name, int age)
 73         {
 74             ITable item;
 75             switch (type)
 76             {
 77                 case TableType.TableA:
 78                     item=new TableA();
 79                     break;
 80                 case TableType.TableB:
 81                     item=new TableB();
 82                     break;
 83                 default:
 84                     item=new TableC();
 85                     break; 
 86             }
 87             item.Name=name;
 88             item.Age=age;
 89             return  item;
 90         }
 91      
 92         public  void Add(string name,int age)
 93         { 
 94             ITable t=Set(name, age);
 95             switch (type)
 96             {
 97                 case TableType.TableA:                 
 98                      Core.TableAs.InsertOnSubmit(t as TableA);
 99                      break;
100                 case TableType.TableB:
101                      Core.TableBs.InsertOnSubmit(t as TableB);
102                      break;
103                 default:
104                      Core.TableCs.InsertOnSubmit(t as TableC);
105                      break;
106             }
107             Core.SubmitChanges();         
108             
109         }
110 
111         public  void Update(ITable item)
112         {
113             var it=Get(item.ID);
114             if (it==null)
115                   return;
116             it.Name=item.Name;
117             it.Age=item.Age;
118             Core.SubmitChanges();
119         }
120    
121         public  void Delete(int ID)
122         {
123             var it=Get(ID);
124             if (it==null)
125                 return;
126             switch (type)
127             {
128                 case TableType.TableA:
129                       Core.TableAs.DeleteOnSubmit(it as TableA);      
130                       break;
131                 case TableType.TableB:
132                      Core.TableBs.DeleteOnSubmit(it as TableB);
133                      break;
134                 default:
135                      Core.TableCs.DeleteOnSubmit(it as TableC);
136                      break;
137             }
138             Core.SubmitChanges();
139         }
140          
141     }
142 
143 }

1             string name="wangriqiang";
2             int age=101;
3             var t=new TableX(TableType.TableA);
4             t.Add(name, age);

二  使用BaseRepository<T>

 1     public class ITableRepository<T>: BaseRepository<T> where T :class,ITable,new()
 2     {
 3     }
 4 
 5     public class Tablexx<T> where T:class,ITable,new()
 6     {
 7         ITableRepository<T> rep=new ITableRepository<T>();
 8         
 9         public IQueryable<ITable> GetList()
10         {
11             return rep.All as IQueryable<ITable>;
12         }
13       
14         public ITable GetByID(int id)
15         {
16            return  rep.GetById(id);
17         }
18 
19         public void DeleteByID(int id)
20         {
21             rep.DeleteById(id);
22             rep.Save();
23         }
24 
25         public void Add(ITable it)
26         {   
27             T t=new T();
28             t.ID=it.ID;
29             t.Name=it.Name;
30             t.Age=it.Age;
31             rep.Add(t);
32             rep.Save();
33         }
34         public void Delete(ITable it)
35         {
36             rep.DeleteById(it.ID);
37             rep.Save();
38         }
39 
40         public void Update(ITable it)
41         {
42             var t=GetByID(it.ID);
43             t.Name=it.Name;
44             t.Age=it.Age;
45             rep.Save();
46         }
47 
48     }
49     public class TableHelper
50     {
51         public static void Add(ITable it)
52         {
53             Call("Add", it);
54         }
55        
56         public static void Delete(ITable it)
57         {
58             Call("Delete", it);
59         } 
60         public static void Update(ITable it)
61         {
62             Call("Update", it);           
63         }
64 
65         public static void Call(string funcname, ITable it)
66         {
67             Type tabletype=it.GetType();
68             var tx=typeof(Tablexx<>);
69             Type constructed=tx.MakeGenericType(tabletype);
70             object o = Activator.CreateInstance(constructed);
71             var addmm=constructed.GetMethod(funcname);
72             addmm.Invoke(o, new[] { it });
73         }
74 
75     }
76 }
原文地址:https://www.cnblogs.com/AspDotNetMVC/p/2854983.html