2015-06-16 15 views
0

我嘗試在firebird sql server上使用linq2db。 我有兩個表,有相關性。如何在linq2db中使用關聯

[Table("REQUESTS")] 
    public partial class Request 
    { 
     [Column("ID")] 
     [PrimaryKey] 
     public int Id { get; set; } 

     [Column("LATEST_REQUEST_DATA_ID")] 
     public int? LatestRequestDataId { get; set; } 

     [Association(ThisKey="LATEST_REQUEST_DATA_ID", OtherKey="ID")] 
     public virtual RequestData LatestData { get; set; } 
    } 

    [Table("REQUEST_DATA")] 
    public class RequestData 
    { 

     [Column("ID")] 
     [PrimaryKey] 
     public int Id { get; set; } 

     [Column("REQUEST_ID")] 
     public int RequestId { get; set; } 
    } 

    public class RequestDb : DataConnection 
    { 
     public ITable<Request> Requests { get { return GetTable<Request>(); } } 
     public ITable<RequestData> Data { get { return GetTable<RequestData>(); } } 
    } 

    ... 
     using (var context = new RequestDb()) 
     { 

      var r = context.Requests.FirstOrDefault(); 
      var d = context.Data.FirstOrDefault(dd => dd.Id == r.LatestRequestDataId); 
      Console.WriteLine(r); 
     } 

我也得到d,其中有結果後,我試圖從r.LatestData的結果,但我得到r.LatestData是空 爲什麼我得到r.LatestData = NULL?

回答

2

您的代碼返回null,因爲Linq2Db在實現過程中沒有考慮帳戶中的關聯(僅當您手動指出時)。這是做到:1)避免循環(因爲你記得沒有沉重的DataContext-所以它創建每次新類) 2)優化查詢(不作不必要的連接)。 所以在你的樣品你必須寫:

r=context.Requests.LoadWith(request=> 
request.LatestData).FirstOrDefault();