2011-08-24 81 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