2013-09-04 16 views
6

Tôi đang sử dụng phân cấp 'bảng mỗi loại' trong dự án mã đầu tiên của tôi (EF5). các lớp thừa kế của tôi ghi đè lên tên chính-key mặc định để xác định rõ mối quan hệ này từ một quan điểm cơ sở dữ liệu của xem, như vậy:EF CodeFirst THT - Cột 'Id' được chỉ định như một phần của MSL này không tồn tại trong MetaDataWorkspace

/* change primary keys to Chair.ProductId and Table.ProductId */ 
modelBuilder.Entity<Chair>() 
    .Property(x => x.Id) 
    .HasColumnName("ProductId"); 

modelBuilder.Entity<Table>() 
    .Property(x => x.Id) 
    .HasColumnName("ProductId"); 

Sử dụng các lớp sau đây làm ví dụ:

[Table("Product")] 
public class Product 
{ 
    public int Id {get; set;} 

    /* generic product properties */ 
} 

[Table("Chair")] 
public class Chair : Product 
{ 
    /* specific chair properties */ 
} 

[Table("Table")] 
public class Table : Product 
{ 
    public virtual ICollection<Chair> Chairs {get; set;} 

    /* specific table properties */ 
} 

nào gây ra lỗi sau trên thuộc tính Table.Chairs: Cột 'Id' được chỉ định là một phần của MSL này không tồn tại trong MetaDataWorkspace.

Tôi hiểu là EF có thể không thấy rằng Sản phẩm Ghế của PK đã thay đổi .. (và vẫn giả định nó được gọi là 'Id') Nhưng tôi không thể tìm ra cách hướng dẫn EF sử dụng Chìa khóa.

Thx,

PS. Vâng, tôi biết, nếu tôi không thay đổi tên của PK thì nó hoạt động ... nhưng nó có thể được thực hiện bằng cách sử dụng API EF Fluent không?

+2

Tìm thấy 30 phút giải pháp sau khi tôi đăng. Tất cả những gì tôi cần làm là thêm những điều sau đây: modelBuilder.Entity

() .HasMany (x => x.Chairs) .WithMany() Bản đồ (m => { m.MapLeftKey ("TableId"); m.MapRightKey ("ChairId"); m.ToTable ("TableChairs"); }); Và mọi thứ đã hoạt động như mong đợi;) – Elmar

Trả lời

0

Gửi bài bình luận của bạn như là một câu trả lời:

Thêm dòng sau:

modelBuilder.Entity<Table>().HasMany(x => x.Chairs).WithMany() 
.Map(m => { 
m.MapLeftKey("TableId"); m.MapRightKey("ChairId"); 
m.ToTable("TableChairs"); 
}); 
2

Đây là một số lỗi của máy phát điện model EDMX trong Visual Studio.

Để giải quyết làm điều này:

  • loại bỏ bảng cụ thể từ EF.
  • tiết kiệm EF và khởi động lại Visual Studio
  • thêm bảng đặc biệt với mô hình một lần nữa
  • lưu và biên dịch

Tôi có Visual Studio 2015 udpate 3

+0

Tôi sắp đăng câu hỏi và câu trả lời này cho đến khi tôi tìm thấy điều này. Tôi sẽ nhấn mạnh việc khởi động lại Visual Studio. Thật là một sự cố lạ. – christo8989

+0

Giải pháp này có vẻ phù hợp với tôi nhưng vấn đề là vì tôi phải tạo lại bảng/mô hình (sử dụng dev db), nó sẽ thêm các thứ khác mà tôi không cần (hoặc không chắc chắn là trong db prod) phá sản xuất. – alltej

+0

Tôi nghĩ đây là lỗi hợp pháp trong thế hệ EF hoặc với VS. Tôi đã nghi ngờ một cái gì đó không hoạt động chính xác trong máy địa phương của tôi vì tôi đã thêm cột theo cách thủ công như được đăng ở đây http://stackoverflow.com/questions/35950795/adding-a-new-column-to-an-existing-table-in -entity-framework/38795367 # 38795367 (câu trả lời tôi đăng một lúc) bằng cách thêm cột theo cách thủ công. Để chứng minh điều đó, tôi yêu cầu đồng nghiệp của tôi thêm các cột theo cách thủ công vào tệp edmx. Anh ấy đã đăng ký mã, nhận mã mới nhất trong máy của tôi và cập nhật hoạt động. – alltej

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