문제

잠시 후에 제목이 충분히 이해되지 않는다면 죄송합니다. 제 문제를 설명할 문구를 제시할 수 없었습니다.

그것은 다음과 같다:저는 데이터베이스 우선 접근 방식인 EF6을 사용하고 있습니다.내 모든 엔터티에는 ID와 Enabled 속성이 있습니다.내 DAL에 EDMX 파일이 있고 이제 비즈니스 계층(BLL)을 디자인해야 합니다.

어떤 데이터가 DAL에서 오고 앱의 나머지 부분에 표시되는지 확인해야 하므로 일반 연산자를 위한 인터페이스를 만들고 이를 구현하는 기본 클래스를 만들고 모든 사용자 지정 데이터베이스 테이블\엔티티 공급자를 갖기로 결정했습니다. 그것을 상속받습니다.

그게 이해가 되지 않는다면, 내가 하고 있는 일은 다음과 같습니다:(이 모든 것이 BLL에 있습니다)

public interface IEntityManager<T> where T : class {
        void Add(T e, bool commit=false);
        void Delete(T e);
        void DeleteByID(int id);
        void Update(T e);
        IQueryable<T> Search(Expression<Func<T, bool>> predicate);
        IQueryable<T> GetAll();
        T Get(int id);
    }

이제 일반적인 작업을 구현하는 기본 클래스는 다음과 같습니다.(가독성과 간결성을 위해 편집됨)

 public class EntityManager<TEntity> : IDisposable, IEntityManager<TEntity> where TEntity : class {
        private readonly DbContext _ctx;
        private readonly DbSet<TEntity> _set;

        public EntityManager() {
            _ctx = new DomainModelFactory();
            _set = _ctx.Set<TEntity>();
        }

        public void Add(TEntity e) {
            _set.AddOrUpdate(e);
        }            

//other methods here

        public TEntity Get(int id) {
            return _set.Find(id);
        }


    }

실제로 데이터에 액세스하고 이를 애플리케이션 전체에서 사용할 수 있게 만드는 관리자를 만들기 위해 다음과 같은 작업을 계획하고 있습니다.

public class VenueManager: EntityManager<Venue> {
        public VenueManager():base()  {
        }
    }

내 Venue 엔터티를 관리할 클래스용입니다.다음과 같은 것을 사용하는 대신 클래스를 만들고 있습니다.

var venueManager = new EntityManager<Venue>();

왜냐하면 이러한 클래스에는 몇 가지 특수한 메서드가 있기 때문입니다.내가 지금까지 한 일을 당신이 이해할 수 있기를 바랍니다.

이제 내 문제는 모든 엔터티에 두 가지 공통 필드가 있다는 것입니다.id (int) 및 enabled (bool) id로 삭제할 때와 코딩 할 때이를 사용해야합니다.이제 저는 Manager 클래스를 생성하기 때문에 코드를 c&p로 사용할 수 있다는 것을 알고 있지만 EntityManager 클래스에서 이것을 코딩하고 모든 관리자가 메서드를 상속받도록 할 수 있는 방법이 있는지 궁금합니다. 클래스 ?

이 같은:EntityManager 클래스에서:

 public TEntity Get(int id) {
            return _set.Where(T.ID==id);
        }

그것이 기본적으로 내가 원하는 것입니다:모든 Manager 클래스(예제에서는 ManagerVenue)가 이러한 메서드를 상속하는 방식으로 중요한 기본 클래스(EntityManager)(메서드 deletebyid, get 및 getall)에서 이러한 속성을 사용하는 방법이므로 전체적으로 작성할 필요가 없습니다. 그리고 끝났어?(약 100개의 엔터티가 있음)

도움이 되었습니까?

해결책

모든 엔터티에 대해 다음과 같이 기본 클래스 또는 인터페이스를 정의해야 합니다.

public class Entity {
    public int Id { get; set; }
    public bool Enabled { get; set; }
}

그리고 당신의 EntityManager 클래스는 다음과 같은 TEntity에 일반 제약 조건을 추가합니다. where TEntity : Entity

그러면 공통 속성을 사용할 수 있습니다. Id 그리고 Enabled 기본 클래스 내부 EntityManager.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top