1

DB から Customers のデータ アクセス関数を作成する次のクラスがあります。

    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;
    }

Employee クラスだけを使用して、まったく同じ機能を必要とする、Employees などのクラスをさらに作成します。

コードの重複を回避し、何らかの方法でテンプレート/ジェネリックを使用する方法はありますか?

ありがとう

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 に答える