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