2012-05-03 31 views
5

Tôi quan tâm đến cách tôi có thể ánh xạ hai thực thể vào cùng một bảng, bằng cách sử dụng mã đầu tiên. Dưới đây là ví dụ:Mã EF Đầu tiên Nhiều thực thể vào cùng một bảng

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 
    public string Name { get; set; } 
    public byte Age { get; set; } 
    public bool Active { get; set; } 
    public DateTime Created { get; set; } 
} 

public class UserViewModel 
{ 
    [Key] 
    public int UserId { get; set; } 
    public string Name { get; set; } 
    public byte Age { get; set; } 
} 

Về cơ bản tôi chán ngấy với kho lưu trữ. Tôi muốn lập bản đồ tất cả các mô hình có thể cho cổng cấu hình, cổng thông tin người dùng, các dịch vụ khác trong trình mô hình hóa và chỉ sử dụng DbContext cho mọi thứ. Tôi muốn thiết lập lớp người dùng là đầu của hệ thống phân cấp và một lớp xây dựng cơ sở dữ liệu, trong khi tất cả các mô hình khác chỉ nên có cho các ứng dụng khác nhau.

Tôi không muốn sử dụng tự động hóa. Tôi cũng đã thực hiện một số tiền công bằng của mã hóa thủ công mà chỉ lãng phí thời gian của tôi, và mỗi sửa đổi duy nhất đòi hỏi tôi phải quay trở lại kho và recode - mà làm phiền tôi.

Tôi đã cố gắng sử dụng này trong modelbuilder, nhưng nó cảnh báo tôi rằng hệ thống phân cấp là không hợp lệ:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().Map(p => { p.ToTable("Users"); }); 
     modelBuilder.Entity<UserViewModel>().Map(p => { p.ToTable("Users"); }); 
    } 

Cũng nên nhớ rằng tôi không cố gắng để đạt được "Bảng tách". Tôi không muốn bảng của tôi được chia thành hai thực thể, tôi muốn có tất cả các cột không có giá trị, ngoại trừ một cột có khóa chính và cho phép các ứng dụng/dịch vụ web/cổng web khác nhau điền nhiều dữ liệu như chúng đã được cấp truy cập cho.

Cảm ơn tất cả các mẹo :)

+0

Hãy nhìn vào mô hình kho chung. Tất cả bạn cần là một kho lưu trữ cơ sở duy nhất cho tất cả các thực thể của bạn. Tôi cảm thấy đau đớn của bạn, tôi đã sử dụng một kho lưu trữ cho mọi thực thể cho đến khi tôi phát hiện ra mẫu kho lưu trữ chung. – JBeckton

Trả lời

9

Bạn không thể. Một bảng = một thực thể (ngoại trừ ánh xạ nâng cao như phân tách bảng đã đề cập và kế thừa TPH). Xem mô hình không phải là và thực thể. Nó chỉ là xem trên dữ liệu/chiếu để xử lý nó theo cách đó. Bạn sẽ luôn luôn làm việc với người dùng và dự án sử dụng để xem mô hình bạn cần:

var view = from u in context.Users 
      select new UserViewModel 
       { 
        UserId = u.UserId, 
        Name = u.Name, 
        Age = u.Age 
       }; 

Hãy phương pháp như tái sử dụng này trở IQueryable<UserViewModel> và bạn có thể làm bất cứ điều gì bạn muốn.

+0

Tôi đã làm chiếu trước, nhưng không phải với phương pháp tái sử dụng. Ý tưởng của bạn cả hai đã giúp tôi + mã của tôi bây giờ trông thanh lịch hơn nhiều. Cảm ơn! –

+1

Cơ sở dữ liệu vẫn trả về dữ liệu không cần thiết mặc dù không rực rỡ. Tôi đã hy vọng để loại bỏ một số varchar (tối đa) s từ một truy vấn bằng cách sử dụng phương pháp này nhưng nó vẫn trả về tất cả dữ liệu đó và chỉ cần loại bỏ các thuộc tính trong ứng dụng web – BritishDeveloper

+0

Điều này là tốt cho kịch bản này nhưng cảnh báo những người khác quan tâm về hiệu suất – BritishDeveloper

1

Bảng mỗi Hierarchy TPH thừa kế trong khuôn khổ tổ chức với mã đầu tiên

https://www.youtube.com/watch?v=2i7jahkpeQ8&list=PL6n9fhu94yhUPBSX-E2aJCnCR3-_6zBZx&index=19

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. –

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