1

我有以下类,它为我的数据库中的客户创建数据访问功能:

    public static Customer Get(int ID)
    {
        KezberPMDBDataContext db = new KezberPMDBDataContext();
        return (from p in db.Customers
               where p.CustomerID == ID
               select p).FirstOrDefault();
    }

    public static bool Remove(int ID)
    {
        Customer c = Get(ID);
        if (c != null)
        {
            KezberPMDBDataContext db = new KezberPMDBDataContext();
            db.Customers.DeleteOnSubmit(c);
            db.SubmitChanges();
            return true;
        }

        return false;
    }

我将创建更多的类,例如Employees,它们需要完全相同的功能,只是使用Employee 类。

有什么方法可以避免代码重复并以某种方式使用模板/泛型?

谢谢

4

2 回答 2

0

EntityFramework 4.3 和 5 的DbSet类有一个Find完全按照您的Get方法执行的方法,以及一个Remove执行您执行的操作的方法Remove(它接受对象而不是 id)。

于 2013-01-15T16:03:03.277 回答
0

你可以这样做:

 private T GetById(int id, IQueryable<T> list)
    {
        var itemParameter = Expression.Parameter(typeof(T), "item");

        var whereExpression = Expression.Lambda<Func<T, bool>>
            (
            Expression.Equal(
                Expression.Property(
                    itemParameter,
                    PrimaryKeyName
                    ),
                Expression.Constant(id)
                ),
            new[] { itemParameter }
            );

        var item = list.Where(whereExpression).SingleOrDefault();

        if (item == null)
        {
            throw new PrimaryKeyNotFoundException(string.Format("No {0} with primary key {1} found",
                                                                typeof(T).FullName, id));
        }

        return item;
    }
于 2013-01-15T16:05:13.333 回答