2013-02-26 82 views
0

我試圖將業務對象映射到數據優先自動生成的實體。然而,Iam在我的mapper類中得到一個錯誤,我返回new Lab將映射的業務對象返回到EF實體部分類時出錯

的錯誤是"Cannot Convert expression type 'LabManager.DataAcces.Lab' to return type LabManager.BusinessObjects.BusinessObjects.Lab"

我的問題是:爲什麼我收到的時候我回正是,預計我的映射類這個錯誤?

我的業務對象是這樣的:

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

實體我映射的業務對象是:

public partial class Lab 
{ 
    public Lab() 
    { 
     this.Cylinders = new HashSet<Cylinder>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Cylinder> Cylinders { get; set; } 
} 

,我只是用手工卷制的映射類(無AutoMapper ):

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

爲什麼你只在方法聲明中使用完整類型名稱,而不是在任何地方使用? – Kniganapolke 2013-02-26 15:43:04

+0

@Kniganapolke這是一個很好的問題。我想我應該。我以前從來沒有真正需要這樣的資格。我通常會盡量保持對象名稱的獨特性,因此不必以此方式進行限定。我很可能會重構名稱和冗餘名稱空間(BusinessObjects.BusinessObjects)。 – 2013-02-26 15:54:56

回答

1

您很可能有名稱空間衝突。您需要完全限定您的GetLabs函數中的構造函數:

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

這應該有所斬斷。

+0

感謝您的回答。將該名稱空間添加到初始化程序中,清除了ID和名稱上的「紅色」,但我在初始化柱面的行上繼續出現錯誤。現在的錯誤是''不能將源類型System.Collections.Generic.ICollection '轉換爲目標類型'System.Collections.Generic.ICollection ''這仍然是命名空間問題? – 2013-02-26 15:52:46

+0

參數的完全限定類型 – Kniganapolke 2013-02-26 15:58:35

+0

是的,這是同樣的問題。但是,您需要爲entity.Cylinders類編寫一個轉換方法 - 名稱與Cylinders屬性相同你的Lab對象,但它們實際上是完全不同的對象,EF可能已經爲你創建了一個轉換器;否則,你將不得不創建一個新的BusinessObjects.Cylinder,並從DataAccess.Cylinder中一個一個地分配屬性。 – 2013-02-26 15:58:46