2014-02-11 11 views
0

我開始玩弄MVC5,並有如下的模型結構的數據:MVC模型 - 如何得到我所需要的1個LINQ

我需要的是所有的數據,填補了力學模型,所以這是機械師,地址,國家名稱,運營時間框架,一天不是dayid。

Linq有可能嗎?如果是這樣,我已經嘗試了很多方法,並且永遠無法得到國家名或日期。

我在類聲明下包含了一些失敗的linq嘗試。

public class Mechanic 
{ 
    public Int32 ID { get; set; } 
    public String CompanyName { get; set; }  
    public DateTime CreationTimestamp { get; set; } 

    public virtual ICollection<Address> Addresses { get; set; } 
    public virtual ICollection<MechanicService> MechanicServices { get; set; } 
    public virtual ICollection<MechanicOperationalTimeFrame> MechanicOperationalTimeFrames { get; set; } 
} 
public class Address 
{ 
    public Int32 ID { get; set; } 
    public int MechanicId { get; set; } 
    public String AddressLine1 { get; set; } 
    public String AddressLine2 { get; set; } 
    public String AddressLine3 { get; set; } 
    public String District { get; set; } 
    public String Region { get; set; } 
    public String PostalCode { get; set; } 
    public int CountryId { get; set; } 
    public DateTime CreationTimestamp { get; set; } 

    public virtual Mechanic Mechanic { get; set; } 
    public virtual Country Country { get; set; } 
} 

public class Country 
{ 
    public int ID { get; set; } 
    public String CountryName { get; set; } 

    public virtual ICollection<Address> Addresses { get; set; } 
} 

public class MechanicOperationalTimeFrame 
{ 
    public Int32 ID { get; set; } 
    public Int32 DayId { get; set; } 
    public String Opening { get; set; } 
    public String Closing { get; set; } 
    public Int32 MechanicId { get; set; } 

    public virtual Mechanic Mechanic { get; set; } 
    public virtual Day Day { get; set; } 


} 

public class Day 
{ 
    public Int32 ID { get; set; } 
    public String Name { get; set; } 

    public virtual ICollection<MechanicOperationalTimeFrame> MechanicOperationalTimeFrames { get; set; } 
} 

public class MechanicService 
{ 
    public Int32 ID { get; set; } 
    [StringLength(30), DisplayName("Service provided")] 
    public String Service { get; set; } 
    public Int32 MechanicId { get; set; } 


    public virtual Mechanic Mechanic { get; set; } 
} 

這裏是我的一些失敗的嘗試:

//var mechanic = from m in db.Mechanics 
//    join a in db.Addresses on m.ID equals a.MechanicId 
//    join ms in db.MechanicServices on m.ID equals ms.MechanicId into services 
//    from y in services.DefaultIfEmpty() 
//    join mo in db.MechanicOperationalTimeFrames on m.ID equals mo.MechanicId into hours 
//    from h in hours.DefaultIfEmpty() 
//    select new { m.CompanyName, y.Service, h.DayId }; 

//Mechanic mechanic = (Mechanic)db.Mechanics 
    .Where(a => a.ID == id) 
    .Include(a => a.Addresses) 
    .Include(a => a.MechanicServices) 
    .Include(a => a.MechanicOperationalTimeFrames).SingleOrDefault(); 


//Mechanic mechanic = db.Mechanics.Where(m => m.ID == id) 
// .Include("Addresses") 
// .Include("MechanicServices") 
// .Include("MechanicOperationalTimeFrames").Single(); 

這裏的分貝的快照。

snapshot of db 任何幫助或指針非常感謝。

+0

如果您檢索Mechanics並將其傳遞給視圖,那麼您應該可以訪問所有虛擬屬性? –

回答

0

您在循環數據引用時遇到問題。您的地址模型包含國家/地區收藏。你的國家模式有一個地址集合。 EF將扼殺這份循環參考資料。至少,您需要從您的國家/地區模型中刪除地址集合。

public class Country 
{ 
    public int ID { get; set; } 
    public String CountryName { get; set; } 
} 

您在力學和相關模型中遇到類似問題。

相關問題