0

私は一般クラスです。create メソッドが ID で seingleOrDefault を取得する必要がありますか?

これを行う方法?

public T GetByID(int id)
{
    _entities.Set<T>().Single(x => x.);
}

一般クラス:

   public abstract class GenericRepository<C, T> : IGenericRepository<T>
        where T : class
        where C : DbContext, new()
    {

        private C _entities = new C();
        public C Context
        {

            get { return _entities; }
            set { _entities = value; }
        }

        public virtual IQueryable<T> GetAll()
        {

            IQueryable<T> query = _entities.Set<T>();
            return query;
        }

        public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
        {

            IQueryable<T> query = _entities.Set<T>().Where(predicate);
            return query;
        }

        public virtual void Add(T entity)
        {
            _entities.Set<T>().Add(entity);
        }

        public virtual void Delete(T entity)
        {
            _entities.Set<T>().Remove(entity);
        }

        public virtual void Edit(T entity)
        {
            _entities.Entry(entity).State = System.Data.EntityState.Modified;
        }

        public virtual void Save()
        {
            _entities.SaveChanges();
        }
    }
4

2 に答える 2

3

を使用している場合DbContext、メソッドはの代わりにSet<T>()戻ります。実装しようとしていることを正確に行うメソッドがあります:DbSet<T>ObjectSet<T>DbSet<T>DbSet<T>.Find(params object[] keyValues)

このメソッドは、主キー値を使用して、コンテキストによって追跡されるエンティティを見つけようとします。エンティティがコンテキスト内にない場合、クエリが実行され、データ ソース内のデータに対して評価されます。コンテキスト内またはデータ ソース内にエンティティが見つからない場合は、null が返されます。

使用法:

public T GetByID(int id)
{
    return _entities.Set<T>().Find(id);
}
于 2012-11-22T20:39:19.037 に答える
0

これを一般的な方法で行いたい場合は、 に一般的な制約を追加する必要がありますT

何かのようなもの

public interface IEntity
{
    int Id { get; set; }
}

public abstract class GenericRepository<C, T> : IGenericRepository<T>
    where T : class, IEntity
    where C : DbContext, new()
{
    public T GetByID(int id)
    {
        _entities.Set<T>().SingleOrDefault(x => x.Id == id);
    }

    ...

}
于 2012-11-22T20:40:36.983 に答える