2015-06-04 22 views
9

Điều này tương tự như các câu hỏi herehere, nhưng chúng cũ và không có câu trả lời hay.Mã khung thực thể đầu tiên: Cách bỏ qua các lớp

Hãy nói rằng tôi có các lớp sau:

class HairCutStyle { 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

class CustomerHairCutPreference { 
    public int ID { get; set; } 
    public Customer Customer { get; set; } 
    public HairCutStyle HairCutStyle { get; set; } 
} 

Hãy nói rằng dữ liệu HairCutStyle của tôi được lưu trữ trong một bảng trong một cơ sở dữ liệu (tôi nhận được nó từ Paul Mitchell mình). Tôi muốn sử dụng lớp HairCutStyle như một lớp POCO - một thứ mà tôi sẽ sử dụng trong mã để biểu diễn các kiểu cắt tóc, nhưng tôi không cần đọc/ghi thông tin đó trong cơ sở dữ liệu của mình. (Giả sử tôi có một lớp dịch vụ riêng biệt có thể điền dữ liệu cho các lớp này từ cơ sở dữ liệu khác.)

Làm cách nào để nói EF KHÔNG tạo bảng HairCutStyle trong ngữ cảnh db hiện tại của tôi? Nhưng đồng thời, tôi muốn lưu trữ một giá trị trong bảng CustomerHairCutPreference, đó là tham chiếu đến dữ liệu HairCutStyle được lưu trữ ở nơi khác. Một khoá ngoại ảo "ảo", không bị ràng buộc bởi ràng buộc FK cơ sở dữ liệu thực tế.

+2

Bạn đã thử thêm nó vào lớp DbContext chưa? Điều đó có nghĩa là EF không có kiến ​​thức về tệp. – krillgar

+2

Có thể trùng lặp. http://stackoverflow.com/questions/7642205/how-to-configure-ef-code-first-to-not-map-a-specific-type –

Trả lời

5

Có ba điều để đảm bảo:

  1. Hãy chắc chắn rằng bạn không tiếp xúc với một DbSet<HairCutStyle> trong DbContext lớp -derived bạn
  2. Hãy chắc chắn rằng bạn không có bất kỳ đề cập đến HairCutStyle trong OnModelCreating của bạn ghi đè
  3. Đánh dấu tài sản HairCutStyle bằng thuộc tính NotMapped.
18

Thêm thuộc tính ở CustomerHairCutPreference cho HairCutSytleID và sau đó sử dụng thuộc tính [NotMapped] trên thuộc tính HairCutStyle. Tuy nhiên, lưu ý rằng sau đó bạn sẽ chịu trách nhiệm đảm bảo rằng HairCutStyleHairCutStyleID luôn được đồng bộ hóa.

class CustomerHairCutPreference { 
    public int ID { get; set; } 
    public Customer Customer { get; set; } 
    public int HairCutStyleID {get; set; } 

    [NotMapped] 
    public HairCutStyle HairCutStyle { get; set; } 
} 

Ngoài ra, bạn có thể sử dụng để loại trừ FluentAPI HairCutStyle hoàn toàn từ bao giờ được ánh xạ bởi Entity Framework, mà có thể hữu ích nếu bạn có nhiều lớp liên kết đến nó.

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    modelBuilder.Ignore<HairCutStyle>(); 
} 
Các vấn đề liên quan