2011-05-29 16 views
0

目標:
在我的WPF應用程序中使用具有N層的實體框架。來自數據層的實體框架和類產品的連接錯誤

問題:
我無法將類Product從ProductRepository合併到實體框架,該框架也有一個名爲Product的類。

當我試圖解決這個問題我始終檢索此錯誤消息:

錯誤1無法隱式轉換類型 「System.Collections.Generic.List」 到 「System.Collections.Generic。名單」 d:\ Arbete \ kurser \ C#.NET \ Labbar \ Lab3的\ NY \ MediaStore \ DataAccessLibrary \ ProductRepository \ ProductRepository.cs 45 20 DataAccessLibrary

只是一個小提醒: 我想類產品是靈活的,也可用於商業和表示層。

namespace DataAccessLibrary.ProductRepository 
{ 

    public partial class Product 
    { 
     public Int32 ArticleNumber_id { get; set; } 
     public string Name { get; set; } 
     public decimal SalePrice { get; set; } 
     public decimal PurchasePrice { get; set; } 
     //public string Book_url { get; set; } 
     public Int32 ProductCategory_id { get; set; } 
     public Int32 Supplier_id { get; set; } 
     public Int32 Role_id { get; set; } 

    } 
} 

namespace DataAccessLibrary.ProductRepository 
{ 

    /// <summary> 
    /// Responsible for uppdating, adding, deleting, retrieving data from product list. 
    /// </summary> 
    public class Productrepository : IProductrepository 
    { 

     private List<Product> myProductList; 

     private MediaStoreEntities _myMediaStoreEntities = new MediaStoreEntities(); 

     public Productrepository() 
     { 
      myProductList = new List<Product>(); 
     } 

     /// <summary> 
     /// Retrieve all data from the product list 
     /// </summary> 
     /// <returns>A list with full of product data.</returns> 
     public List<Product> GetAllProductList() 
     { 
      var productListt = (from a in _myMediaStoreEntities.Products 
              select a).ToList(); 

      return productListt; 
      //return productList; 
     } 
    } 
} 

類別:ProductRepository
名字空間:DataAccessLibrary.ProductRepository

/// <summary> 
/// Retrieve all data from the product list 
/// </summary> 
/// <returns>A list with full of product data.</returns> 
public List<Product> GetAllProductList() 
{ 
    var productListt = (from a in _myMediaStoreEntities.Products 
            select a).ToList(); 

    return productListt; 
    //return productList; 
} 

aaa bbb ccc

+0

更新有關的類 – 2011-05-29 11:14:02

回答

0

這是因爲您有兩個Product類。一個在ProductRepository命名空間中,另一個在Database命名空間中。這兩個部分必須位於相同的名稱空間中才能形成一個類。

如果您嘗試使用自定義POCO類(僅限EFv4),則必須通過刪除設計器中的自定義工具來關閉自動代碼生成(因爲您仍然在EDMX下有.Designer.cs文件)。然後,你必須創建一個從ObjectContext派生自定義上下文類將暴露ObjectSet<DataAccessLibrary.ProductRepository.Product>

+0

謝謝你的幫助。我有另一個問題。來自你在N層的經驗。如果在數據層中有一個名爲product的常規類。通過在庫/項目中添加引用,該類也被用於表示層。主要問題:是否可以接受或者是否違反了N層哲學的指導原則? – 2011-05-29 21:11:31

+0

是否從表示層引用和使用了DataAccessLibrary?如果是,則必須從表示層訪問這些數據實體。如何在沒有這些實體的情況下將數據從DataAccessLibrary傳輸到表示層?你會在DataAccessLibrary中再次創建另一個類,將實體映射到這些類並將它們傳遞給表示層?這對你的應用程序來說不是矯枉過正嗎?它有時被使用,但我不認爲你需要它。如果DataAccessLibrary不直接在表示層中使用,則可以提取實體以將其分離並在所有層中使用它。 – 2011-05-29 23:04:10

0

您有兩個類,一個Product.cs和一個類位於EDMX的代碼隱藏文件中。而且它們都在不同的命名空間下。

對你來說,ProductRepository.Product類EDMXNamespace.Product可能看起來相同,但對於編譯器,這兩個類是不同的,

List<ProductRepository.Product> != List<EDMXNamespace.Product> 

沒有必要在你的ProductRepository在所有創建Product.cs類因爲您擁有所有相同的字段,即使您想創建單獨的類,您也應該使用某種構造函數來複制所有字段。

+0

所有的項目或庫的額外信息在VS2010創建和版本是EF 4.0 – 2011-05-29 11:00:18

+0

什麼是「ProductRepository.cs 59」內容,Product.cs或同一個命名類是否存在於不同的命名空間中? – 2011-05-29 11:02:48

+0

請再次看看源代碼。我更新了回答您問題的頁面。 – 2011-05-29 11:14:40