2014-04-18 6 views
0

먼저 EF 6.1 코드를 사용하고 별도의 라이브러리 플러그인에있는 여러 dbconext 모델을 사용합니다. 또한 별도의 핵심 라이브러리에있는 공통 기본 클래스 모델도 있습니다. TPT 상속을 사용하고 있습니다. 공통 기본 클래스 테이블을 가질 필요가 없도록 플러그인 모델을 코딩하는 방법을 알고 싶습니다. 이것은 무엇을 내 플러그인 상황은 지금과 같다 :EF 공통 기본 클래스를 사용하는 여러 DbContext

public partial class NewsModel : DbContext 
{ 
    public NewsModel() 
     : base("name=NewsModel") 
    { 
    } 

    public NewsModel(String connectionString) 
     : base(connectionString) 
    { 
    } 

    public virtual DbSet<ContentBase> ContentBaseSet { get; set; } 
    public virtual DbSet<Tag> Tags { get; set; } 

    public virtual DbSet<NewsItem> News { get; set; } 
    public virtual DbSet<NewsFeed> NewsFeeds { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    } 

내가 인해 추가 마이그레이션 명령을 실행하면 모든 콘텐츠 형식이 (다른 플러그인 라이브러리 및 핵심에 선언 된) 사실 ContentBaseSet을 제거하려는 추가 (들)을 마이그레이션합니다. NewModel에 대한 Add-Migration으로 ContentBase와 다른 모든 유형을 상속받지 못하게하고 싶습니다. DbModelBuilder를 사용하여 플러그인 dbcontext를 수정하여이 작업을 수행하는 방법이 있다고 확신합니다. 어떤 아이디어?

답변

0

사용자 지정 규칙과 함께 사용자 지정 특성 클래스를 사용하여 모듈 식 플러그인 콘텐츠 형식 라이브러리 (모든 콘텐츠 형식이 ContentBase 추상 클래스에서 파생 됨)에서 필요하지 않은 요소의 매핑을 해제합니다.

다음은 속성 클래스입니다.

[AttributeUsage(AttributeTargets.Class)] 
public class CoreContentEntity : Attribute 
{ 
} 

각 핵심 내용 유형에는이 특성이 있습니다.

[Table("cms_Events")] 
[CoreContentEntity] 
public partial class Event : ContentBase 
{ 

이제 각 플러그인 컨텐츠 유형 (dbcontext 클래스)에 대해 사용자 정의 규칙을 추가하십시오.

마지막으로 다음은 맞춤 규칙입니다. TPT 상속 플러그인 콘텐츠 클래스에서 작동하기 위해서는

public class UnmapCoreEntitiesConvention : Convention 
{ 
    public UnmapCoreEntitiesConvention() 
    { 
     Types() 
      .Where(t => t.CustomAttributes.Any(n => n.AttributeType == typeof(CoreContentEntity))) 
      .Configure(config => config.Ignore()); 
    } 
} 

, 나는 여전히 모델 dbcontext 클래스의 핵심 ContentBase 클래스를 포함해야합니다. 누구든지 주위에 어떻게 알고 싶은 경우 (각각의 플러그인 유형은 자체 테이블을 가지고 있으며 ContentBase 클래스는 자체 테이블을 가져야 함).

+0

EF 6.1에 dbcontext 클래스에서 직접 참조 된 엔티티 만 포함하는 구성 옵션이있는 것이 좋을 것입니다. –

관련 문제