2012-06-13 35 views
6

Tôi có kịch bản trong đó dữ liệu từ một bảng phải nằm trong 2 đối tượng.Mã khuôn khổ thực thể Đầu tiên: Cách ánh xạ bảng phẳng thành lớp với các đối tượng lồng nhau

[Table] 
-Field1 
-Field2 
-Field3 
-Field4 

Và giao diện lớp như thế này:

[Class1] 
-Field1 
-Field2 
-Class2 object here 

[Class2] 
-Field3 
-Field4 

tôi đã thiết lập trong Class1 thuộc tính [NotMapped] so với tài sản của Class2 có chứa lĩnh vực 3 và 4. Tôi cũng đã thêm cấu hình trong bối cảnh cơ sở dữ liệu:

public class ConfigurationClass1 : EntityTypeConfiguration<Class1> { 
    public ConfigurationClass1() { 
     Property(o => o.Class2.Field3).HasColumnName("Field3"); 
     Property(o => o.Class2.Field4).HasColumnName("Field4"); 
    } 
} 

vấn đề là khi tôi cố gắng sử dụng Entity Framework với Class1 tôi nhận:

Thuộc tính 'Class2' không phải là thuộc tính được khai báo thuộc loại 'Class2'. Xác minh rằng thuộc tính chưa được loại trừ một cách rõ ràng khỏi mô hình bằng cách sử dụng phương thức Bỏ qua hoặc Chú thích dữ liệu NotMappedAttribute . Đảm bảo rằng đó là thuộc tính nguyên thủy hợp lệ.

Làm cách nào tôi có thể sử dụng Mã khung thực thể trước tiên với thực thể có đối tượng lồng nhau với tất cả thông tin trong bảng phẳng?

Trả lời

7

Bạn có thể thực hiện việc này chỉ trong trường hợp Class2 có thể được EF CF nhận dạng là Complex type.

ngắn gọn:

  1. Class2 không được chứa bất kỳ tài liệu tham khảo to Entities EF khác. Chỉ có đối với các loại Kết hợp hoặc loại tiêu chuẩn khác
  2. Loại 2 không thể chung chung. trong trường hợp này, bạn có thể tạo một lớp lồng nhau không chung chung và sử dụng nó trong Class1 của bạn.
+0

Dường như rất nhiều rắc rối cho vấn đề đơn giản là gì. –

+0

@Chuck Conway đồng ý, nhưng đây là cách nó hoạt động trong EF –

+0

Tôi đã hoàn toàn quên về ComplexType. Khi tôi thiết lập nó với thuộc tính ComplexType, mọi thứ đã hoạt động. Cảm ơn bạn. +1 và chấp nhận :) –

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