• 水平分割数据表


      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 }
  • 相关阅读:
    php 二维数组索引乱序 shuffle() 函数;
    php-m 与 phpinfo 不一致的解决办法
    javascript 数组去重
    javascript 闭包实现的5种方法
    javascript 下 function 和 Function的区别
    解决ThinkPhp在nginx下404问题
    TP5.1中的验证类 validate用法
    webstrom 快捷键
    css中可以和不可以继承的属性
    封装 class 类 js
  • 原文地址:https://www.cnblogs.com/AspDotNetMVC/p/2854983.html
Copyright © 2020-2023  润新知