EF6.0 사용자 정의 Code First 규약

5853 단어 first
사용자 정의Code First 약속에는 Lightweight Conventions(경량급 약속), Configuration Conventions(설정형 약속), Model-based Conventions(모델 기반 설정) 등 세 가지 방식이 있다.
Lightweight Conventions:
이것은 DbContext의 OnModelCreating 방법을 직접 다시 써서 약속을 실현할 수 있는 경량급 약속이다. 다음과 같다.
public class BaseDbContext : DbContext

    {

        protected override void OnModelCreating(DbModelBuilder modelBuilder)

        {

            modelBuilder.Types().Configure(f => f.ToTable("cms_" + f.ClrType));  

            //             

        }

    }

Lightweight Conventions는 가장 간단한 실현 방식으로 대부분의 전역 설정 수요를 이런 방식으로 실현할 수 있다.
Configuration Conventions:
Conventions를 사용자 정의하려면 Convention을 계승하고 DbContext의 OnModelCreating 방법을 다시 쓰고 Convention을 추가하면 됩니다.
 1     public class StringMaxLengthConvertion : Convention

 2     {

 3         /// <summary>

 4         ///     

 5         /// </summary>

 6         public StringMaxLengthConvertion()

 7         {

 8             this.Properties().Having(p=>(ColumnLengthAttribute)p.GetCustomAttributes(typeof(ColumnLengthAttribute),true).FirstOrDefault()).Configure((c,a)=>c.HasColumnName(a.ColumnName).HasMaxLength(a.ColumnMaxLength));

 9         }

10     }

11 

12     public class TestDbContext : DbContext

13     {

14         protected override void OnModelCreating(DbModelBuilder modelBuilder)

15         {

16             modelBuilder.Conventions.Add<StringLengthAttributeConvention>();

17         }

18     }

 
Configuration Conventions는 구현이 상대적으로 번거롭지만 자유도가 높습니다.
IConfigurationConvention 인터페이스에는 TMemberInfo와 Tconfiguration 두 가지 유형의 매개 변수가 있습니다.그것들은 당신이 약속하고 싶은 모델 요소를 필터하는 데 사용됩니다.
첫 번째 유형 매개변수인 TMemberInfo는 두 개의 값을 가질 수 있습니다.
  • Type(System)
  • PropertyInfo(System.Reflection)

  • 두 번째 유형의 매개 변수는 Tconfiguration입니다. 임의의 매개 변수일 수 있습니다.
  • ModelConfiguration (System.Data.Entity.ModelConfiguration.Configuration)
  • EntityTypeConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Types)
  • PropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties)
  • NavigationPropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties.Navigation)
  • PrimitivePropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
  • DateTimePropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
  • DecimalPropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
  • LengthPropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
  • BinaryPropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
  • StringPropertyConfiguration (System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)



  • Type 및 PropertyConfiguration (하위 클래스 포함)은 혼용할 수 없으며 그렇지 않으면 Configuration Conventions가 적용되지 않습니다.
    사용자 지정 Data Annotation 추가
    Custom Code First Conventions 를 사용하면 Data Annotation 을 확장할 수 있습니다.예를 들어 Email Attribute 특성을 추가한 다음에Lightweight Conventions나Configuration Conventions에서 속성이 Email Attribute 특성을 적용했는지 판단한다.만약 그렇다면, 열 이름은 'Email' 이고, 열 형식은 'nvarchar (255)' 로 비추어 [Column ('Email')] 과 [maxLength (255)] 가 공통적으로 작용하는 효과를 얻는다.
     
    자세한 내용은 를 참조하십시오.http://msdn.microsoft.com/en-us/data/jj819164.aspx

    좋은 웹페이지 즐겨찾기