2011-08-24 80 views
0

我有一個EF 4.1 POCO類與Vehicle和VehicleOwner。遞歸加載EF 4.1中的stackoverflow POCO

當我加載包括車輛在內的VehicleOwner時,車輛仍然加載VehicleOwner,當您使用Mapper時,它最終會出現在堆棧溢出異常中。

下面是代碼示例

public class VehicleOwner : IVehicleOwner 
    { 

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity),ScaffoldColumn(false)] 
    public int VehicleOwnerId { get; set; } 
    [Required,DisplayName("First Name")] 
    public string FirstName{ get; set; } 
    [Required,DisplayName("Last Name")] 
    public string LastName { get; set; } 

    public virtual ICollection<Vehicle> Vehicles { get; set; } 

} 

public class Vehicle 
{ 
    public Vehicle() 
    { 
     this.RecoveredVehicles = new HashSet<RecoveredVehicles>(); 
    } 

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int VehicleId { get; set; } 
    [DisplayName("Identification Number")] 
    public string IdentificationNumber { get; set; } 
    [Required] 
    [DisplayName("Owner ID")] 
    public int VehicleOwnerId { get; set; } 
    [Required] 
    [ScaffoldColumn(false)] 
    public byte[] RowVersion { get; set; } 


    public virtual VehicleOwner VehicleOwner { get; set; } 
    public virtual ICollection<RecoveredVehicle> RecoveredVehicles { get; set; } 
} 

//當我做到這一點的車輛將會被填充,當您展開VehicleOwner再次填充車輛。

public VehicleOwner GetVehicleOwner(int vehicleOwnerID) 
{ 
    objDataContext.Configuration.ProxyCreationEnabled = false; 
    return (from p in objDataContext.VehicleOwners.Include("Vehicles") where p.VehicleOwnerId == vehicleOwnerID select p).FirstOrDefault<VehicleOwner>();   
} 

有沒有辦法可以阻止這個遞歸循環。

謝謝

回答

0

沒有遞歸循環。 Vehicle指向原始VehicleOwner。它只是返回引用,並且無法避免(僅當您刪除了引用導航屬性時)。

+0

謝謝,我正在爲poco設計一個映射器,我有stackoverflow異常。我想我會轉向automapper。 – Michael

+0

感謝您的評論。我現在在使用AutoMapper,映射是可以的,但是當從WCF返回配對的DTO時,我有這個錯誤信息 - 「底層連接已關閉:連接意外關閉。」 – Michael

+0

感謝您的評論。我現在在使用AutoMapper,映射是可以的,但是當從WCF返回配對的DTO時,我有這個錯誤信息 - 「底層連接已關閉:連接意外關閉。」感謝您的評論。我現在在使用AutoMapper,映射是可以的,但是當從WCF返回配對的DTO時,我有這個錯誤信息 - 「底層連接已關閉:連接意外關閉。」但是當我通過從WCF返回它的循環來改變車輛中的VehicleOwner爲null時。 – Michael