2011-10-06 124 views
2

我有一個產品經理應用程序,我試圖設計使用接口。一個產品可以是兩種類型中的一種打印或在線。我希望能夠對其進行通常的CRUD操作。我使用的是實體框架,但在構建界面時遇到了一些障礙。接口架構設計建議

例如,我去添加我的第一個接口AddProduct(product productToCreate)的方法。我使用什麼類型的產品,因爲我的實體來自實體框架?所以我創建了一箇中間對象調用產品來將實體框架對象轉移到它中,以便它可以放入界面中。是對的嗎?請指教。

class EFPrint 
{ 
    //Entity Framework object 
    public int PrintId { get; set; } 
    public string Product { get; set; } 
    public string Code { get; set; } 
} 

class EFOnline 
{ 
    //Entity Framework object 
    public int OnlineId { get; set; } 
    public string Product { get; set; } 
    public string Code { get; set; } 
} 

class Product 
    { 
    public int Id { get; set; } 
    public string Product { get; set; } 
    public string Code { get; set; } 
    } 

interface IProductManagerService 
{ 
    void AddProduct(Product product); 
} 

class PrintService : IProductManagerService 
{ 

    public void AddProduct(Product product) 
    { 
     throw new NotImplementedException(); 
    } 
} 

class OnlineService : IProductManagerService 
{ 

    public void AddProduct(Product product) 
    { 
     throw new NotImplementedException(); 
    } 
} 

回答

0

實體框架允許您使用基類。您應該創建一個基礎產品類,有OnlineProduct和PrintProduct從產品繼承:

public class Product { ... } 
public class Online : Product { ... } 
public class Print : Product { ... } 

而不是有DbSet每種類型在你的DbContext,你應該有一個產品單一的DbSet,並且只需添加存取以便僅檢索特定類型的產品:

public class ProductsContext : DbContext 
{ 
    public DbSet<Product> Products { get; set; } 

    public IQueryable<Online> OnlineProducts 
    { 
     get 
     { 
      return Products.OfType<Online>(); 
     } 
    } 

    public IQueryable<Print> PrintProducts 
    { 
     get 
     { 
      return Products.OfType<Print>(); 
     } 
    } 
}