【问题标题】:Connection error with Entity framework and class product from data layer与数据层的实体框架和类产品的连接错误
【发布时间】:2011-05-29 10:53:36
【问题描述】:

目标:
在我的 WPF 应用程序中使用具有 N 层的实体框架。

问题:
我无法将映射 ProductRepository 中的类 Product 合并到也有一个名为 Product 的类的实体框架中。

当我尝试解决问题时,我总是会检索到此错误消息:

错误 1 ​​无法隐式转换类型 'System.Collections.Generic.List' 至 'System.Collections.Generic.List' D:\Arbete\kurser\C#.NET\Labbar\Lab3\ny\MediaStore\DataAccessLibrary\ProductRepository\ProductRepository.cs 45 20 DataAccessLibrary

稍微提醒一下: 我希望 Product 类具有灵活性,也可以用于业务和表示层。

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;   
}

【问题讨论】:

  • 更新课程的额外信息

标签: c# wpf entity-framework repository-pattern n-tier-architecture


【解决方案1】:

那是因为你有两个Product 类。一个在 ProductRepository 命名空间中,第二个在 Database 命名空间中。两个部分必须在同一个命名空间中才能形成一个类。

如果您尝试使用自定义 POCO 类(仅限 EFv4),则必须通过删除设计器中的自定义工具来关闭自动代码生成(您没有关闭,因为您的 EDMX 下仍有 .Designer.cs 文件)。然后您必须创建从ObjectContext 派生的自定义上下文类,它将公开ObjectSet&lt;DataAccessLibrary.ProductRepository.Product&gt;

【讨论】:

  • 感谢您的帮助。我有另一个问题。根据您在 N 层的经验。如果您在数据层中有一个名为 product 的常规类。通过在库/项目中添加引用,该类也被用于表示层。主要问题:这样做是否可以接受,还是违反了遵循 N 层理念的指导方针?
  • 您的 DataAccessLibrary 是否从表示层引用和使用?如果是,您必须从表示层访问这些数据实体。如果没有这些实体,您将如何将数据从 DataAccessLibrary 传输到表示层?您是否会在 DataAccessLibrary 中再次创建另一个类,将实体映射到这些类并将它们传递给表示层?这对您的应用程序来说是不是有点矫枉过正。有时会使用它,但我认为您不需要它。如果 DataAccessLibrary 不直接用于表示层,您可以提取实体以分离组件并在所有层中使用。
【解决方案2】:

您有两个类,一个是 Product.cs,一个类位于 EDMX 的代码隐藏文件中。并且两者都在不同的命名空间下。

对你来说,ProductRepository.Product 类和 EDMXNamespace.Product 可能看起来一样,但是对于编译器来说,这两个类是不同的,

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

根本不需要在 ProductRepository 中创建 Product.cs 类,因为您拥有所有相同的字段,即使您想创建单独的类,您也应该使用某种构造函数来复制所有字段。

【讨论】:

  • 所有项目或库均在VS2010中创建,版本为EF 4.0
  • ProductRepository.cs 59 的内容是什么,Product.cs 或同名类是否存在于不同的命名空间中?
  • 请再看一遍源码。我已经更新了回答您问题的页面。
  • 感谢您的帮助。我有另一个问题。根据您在 N 层的经验。如果您在数据层中有一个名为 product 的常规类。通过在库/项目中添加引用,该类也被用于表示层。主要问题:这样做是否可以接受,还是违反了遵循 N 层理念的指导方针?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多