使用linq优化使用Generic Repository到sql c#

时间:2014-06-16 14:46:41

标签: c# linq-to-sql

我是这样的通用存储库类:

public class Repository : IDisposable
{
    public  static DataContext context { get; set; } 
    public static void Insert<T>(T item) where T : class
    {
        try
        { 
            var table = context.GetTable<T>(); 
            table.InsertOnSubmit(item);
            context.SubmitChanges();
        }
        catch (Exception)
        {
            throw;
        }
    } 

    public void Dispose()
    {
        context.Dispose();
    }
} 

上面是我使用Linq到sql插入实体的通用类 我在我的datacontext中总共有10个实体,我正在编写10个这样的Insert方法(例如我提供3种方法)。

public void AddStudent(Student st)
{ 
    Repository.Insert<Student>(st);
}

public void AddEmployee(Employee emp)
{ 
    Repository.Insert<Employee>(emp);
}

public void AddStudent(Product prod)
{ 
    Repository.Insert<Product>(prod);
}
像这样我有10种方法。有没有办法优化此代码。像这样 我想用Add方法创建一个类,我将使用这个add方法整个我的应用程序,只要它是必需的。

public class Class1
{
    public void Add(Table table)
    {
        Repository.Insert<Table>(table);
    }    
}

我想像Class1 cls1 = new Class1(); cls1.Add(StudentObject);

一样使用

可以建议实现类的方法。

1 个答案:

答案 0 :(得分:1)

您可以定义泛型类而不仅仅是方法:

public class Repository<T> : IDisposable
    {
        public  static DataContext context { get; set; } 

        public static void Insert(T item)
        {
            var table = context.GetTable<T>(); 
            table.InsertOnSubmit(item);
            context.SubmitChanges();      
        } 

        public void Dispose()
        {
            context.Dispose();
        }
    } 

然后你得到以下内容,而不是所有其他方法:

var repo = new Repository<Product>();
repo.Insert(aProduct);