2011-11-30 17 views
10

Tôi đang phát triển một lược đồ cơ sở dữ liệu khá lớn bằng cách sử dụng Mã khung thực thể đầu tiên. Tôi thích API thông thạo hơn cách tiếp cận Chú thích dữ liệu, vì nó rời khỏi các đối tượng miền của tôi như là các POCO đơn giản.Mã khung thực thể có phải lần đầu tiên cho phép ánh xạ trôi chảy trong các tệp riêng biệt không?

Để sử dụng API thông thạo, tôi phải ghi đè OnModelCreating trong lớp kế thừa từ DbContext.

Tôi không thích rằng tất cả ánh xạ cho tất cả các thực thể của tôi đều nằm trong phương thức này. Tôi đã sử dụng những thứ như FluentNHibernate trước đây, trong đó mỗi thực thể có lớp ánh xạ riêng của nó. EF có gì tương tự không?

Tôi cho rằng tôi có thể tạo giao diện của riêng mình để triển khai lớp ánh xạ và gọi tất cả chúng trong phương thức OnModelCreating. Tôi có thể sử dụng sự phản chiếu hoặc một IoC để khám phá tất cả. Tôi không đặc biệt nhìn thấy bất cứ điều gì sai trái với cách tiếp cận này, nhưng tôi đã tự hỏi nếu Entity Framework đã đi kèm với một cái gì đó như thế này ra khỏi hộp?

Trả lời

27

Bạn có thể tạo một lớp cấu hình cho mỗi thực thể bắt nguồn từ EntityTypeConfiguration<TEntity> và đặt các lớp này thành các tệp riêng biệt. Trong số xuất phát của bạn DbContext, bạn thêm các cá thể của các lớp cấu hình đó vào trình tạo mô hình. Ví dụ: bối cảnh

public class UserConfiguration : EntityTypeConfiguration<User> 
{ 
    public UserConfiguration() 
    { 
     HasKey(u => u.UserName); 

     Property(u => u.UserName) 
      .HasMaxLength(50) 
      .IsRequired(); 

     // etc. 
    } 
} 

public class RoleConfiguration : EntityTypeConfiguration<Role> 
{ 
    public RoleConfiguration() 
    { 
     HasKey(r => r.RoleName); 

     // etc. 
    } 
} 

Xuất phát:

public class MyContext : DbContext 
{ 
    //... 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new UserConfiguration()); 
     modelBuilder.Configurations.Add(new RoleConfiguration()); 
    } 
} 

Ngoài ra còn có một ComplexTypeConfiguration<T> bạn có thể xuất phát từ cấu hình loại phức tạp.

+3

+1 để bao gồm đề cập đến 'ComplexTypeConfiguration ' – vossad01

+0

Nói chung, phương pháp này có được coi là phương pháp hay không? –

+1

Nó gần như cần thiết khi giao dịch với các mô hình phức tạp lớn. Nếu không, bạn phải đặt tất cả vào một phương pháp OnModelCreating. – Tony

Các vấn đề liên quan