C# 将映射的业务对象返回到EF实体分部类时出错

C# 将映射的业务对象返回到EF实体分部类时出错,c#,entity-framework,C#,Entity Framework,我试图将业务对象映射到数据优先、自动生成的实体。但是,Iam在我的mapper类中遇到了一个错误,我返回了一个新实验室 错误是“无法将表达式类型'LabManager.DataAccess.Lab'转换为返回类型LabManager.BusinessObjects.BusinessObjects.Lab” 我的问题是:当我返回mapper类中所期望的内容时,为什么会出现这个错误 我的业务对象如下所示: namespace LabManager.BusinessObjects.BusinessOb

我试图将业务对象映射到数据优先、自动生成的实体。但是,Iam在我的mapper类中遇到了一个错误,我返回了一个
新实验室

错误是
“无法将表达式类型'LabManager.DataAccess.Lab'转换为返回类型LabManager.BusinessObjects.BusinessObjects.Lab”

我的问题是:当我返回mapper类中所期望的内容时,为什么会出现这个错误

我的业务对象如下所示:

namespace LabManager.BusinessObjects.BusinessObjects
{
    public class Lab
    {
        public Lab()
        {

        }
        public int Id { get; set; }
        public string Name { get; set; }
        public IList<Cylinder> Cylinders { get; set; }
    }
}

您很可能存在名称空间冲突。您需要在GetLabs函数中完全限定构造函数:

return new BusinessObjects.BusinessObjects.Lab
    {
         Id = entity.Id,
         Name = entity.Name,
         Cylinders = entity.Cylinders
    };

这应该可以解决问题。

为什么只在方法声明中使用Lab的完整类型名,而不是在所有地方使用?@Kniganapolke这是个好问题。我想我应该。我以前从来没有像现在这样获得过资格。我通常会尽量保持我的对象名的唯一性,这样就不必以这种方式进行限定。我很可能会重构名称和冗余名称空间(BusinessObjects.BusinessObjects)。谢谢你的回答。将该名称空间添加到初始值设定项确实清除了ID和名称上的“红色”,但在初始化圆柱体的行上仍然存在错误。现在的错误是
“无法将源类型System.Collections.Generic.ICollection”转换为目标类型System.Collections.Generic.ICollection”“
这仍然是一个命名空间问题吗?请完全限定参数的类型。是的,这是相同的问题。”。但是,您需要为entity.Cyclares类编写一个转换方法-名称与实验室对象中的Cyclares属性相同,但实际上它们是完全不同的对象。EF可能已经为您创建了一个转换器;否则,您必须创建一个新的BusinessObjects.Cylinder,并从DataAccess.Cylinder中逐个分配属性。您能给我一个转换方法的示例吗?我检查了,DataAccess中的圆柱体类是单数,DataAccess.Lab类中的属性名是复数。这难道还不够清楚吗?@StevenWestbrook Ohhhhhhh我刚刚明白你说的圆柱体是一样的,但不同。我又读了一遍错误。
namespace EmitLabManager.DataAccess.ModelMapper
public class Mapper
{
   internal static BusinessObjects.BusinessObjects.Lab GetLabs(Lab entity)
   {
        return new Lab
        {
             Id = entity.Id,
             Name = entity.Name,
             Cylinders = entity.Cylinders
        };
    }
}
return new BusinessObjects.BusinessObjects.Lab
    {
         Id = entity.Id,
         Name = entity.Name,
         Cylinders = entity.Cylinders
    };