2008-12-09 39 views
11

Tôi có hai lớp liên quan chia sẻ một giao diện chung và được lưu trữ trong cùng một bảng cơ sở dữ liệu. Tuy nhiên, Entity Framework tạo ra một lớp chung, nơi tôi thực sự cần hai lớp riêng biệt. Làm cách nào để giải quyết vấn đề này? Tốt nhất là sử dụng một lớp cơ sở chứ không phải là một giao diện? Làm thế nào để thay đổi mô hình EF để cung cấp hai lớp được ánh xạ trên một bảng?Phân cấp lớp và giao diện trong khung thực thể?

Chỉnh sửa: thuộc tính AccountType xác định loại lớp; người dùng hoặc nhóm.

Một số mã đơn giản:

public interface IAccount 
{ 
    string Name { get; set; } 
    AccountType AccountType { get; set; } 
} 

public class GroupAccount : IAccount 
{ 
    public string Name { get; set; } 
    public GroupType GroupType { get; set; } 
    public AccountType AccountType { get; set; } 
} 

public class UserAccount : IAccount 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Name { get; set; } 
    public AccountType AccountType { get; set; } 
} 

Trả lời

14

Liệu dữ liệu này phân biệt đối xử? tức là AccountType có định nghĩa loại đó là gì không? Nếu vậy:

  • EF nên tạo ra các thực thể tài khoản từ việc lưu trữ
  • bạn sau đó tạo 2 lớp con (UserAccount và GroupAccount)
  • trong bản đồ cho tài khoản, chỉ ra một vị "thêm một điều kiện"
    • có nó bản đồ để UserAccount nơi (lưu trữ) lĩnh vực AccountType là 1 (hoặc bất kỳ)
    • có nó bản đồ để GroupAccount nơi (lưu trữ) lĩnh vực AccountType là 2 (hoặc bất kỳ)

Loại tài khoản sau đó sẽ biến mất hoàn toàn khỏi đối tượng Tài khoản (unmap it if not). Để chỉ nhận được các bản ghi UserAccount, bạn sử dụng

.Accounts.OfType<UserAccount>()... 

Lớp tài khoản có lẽ nên trừu tượng trong mô hình này. Các công cụ giao diện có thể được thêm vào thông qua một lớp học phần - ví dụ: trong một file riêng biệt, xác định:

partial class Account : IAccount { 
    // extra code here 
} 

vv

Một hương hợp lý là here.

+0

.. bạn trả lời chúng nhanh như tôi yêu cầu, cảm ơn;) – flesh

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