2011-09-12 16 views
51

Tôi đang sử dụng phương pháp tiếp cận EF CF cho một trang web có MySQL. Vì lý do nào đó EF tạo một cột trong bảng Post của tôi có tên là "Discriminator" và chứa VARCHAR "Post".Mã khuôn khổ pháp nhân đầu tiên tạo cột "phân biệt đối xử"

Tại sao cột này được tạo? Tôi có thể làm gì đó để tránh nó được tạo ra không? Có lợi thế nào khi có cột này không?

Trả lời

86

Cột Discriminator được sử dụng và bắt buộc trong các trường hợp thừa kế Table-Per-Hierarchy. Nếu bạn ví dụ có một mô hình như thế này ...

public abstract class BaseEntity 
{ 
    public int Id { get; set; } 
    //... 
} 

public class Post : BaseEntity 
{ 
    //... 
} 

public class OtherEntity : BaseEntity 
{ 
    //... 
} 

... và làm cho BaseEntity một phần của mô hình, ví dụ bằng cách thêm một DbSet<BaseEntity> đến bối cảnh có nguồn gốc của mình, Entity Framework sẽ lập bản đồ phân cấp lớp này bằng cách mặc định thành một bảng, nhưng giới thiệu một cột đặc biệt - Discriminator - để phân biệt giữa các loại khác nhau (Post hoặc OtherEntity) được lưu trữ trong bảng này. Cột này được điền bằng tên của loại (một lần nữa là Post hoặc OtherEntity).

+0

Cảm ơn câu trả lời hay. Tuy nhiên, mô hình của tôi không có nguồn gốc. Tại sao EF vẫn tạo ra sự phân biệt đối xử? – kasperhj

+0

@lejon: Bạn có thể hiển thị mô hình trong câu hỏi của mình không? Tôi chưa bao giờ thấy một cột 'Discriminator' khác ngoài một ngữ cảnh thừa kế. Mã của tôi ở trên chỉ là một ví dụ. Bạn sẽ nhận được cùng một ví dụ nếu 'Post' chính nó là không có nguồn gốc, nhưng nếu có các thực thể khác có nguồn gốc từ' Post'. – Slauma

+0

Tôi hiểu rồi! Một mô hình khác bắt nguồn từ Bài đăng. Cảm ơn bạn đã trả lời! – kasperhj

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