我正在使用 linq2db 和 Firebird SQL 服务器。 我有两张表,它们有关系。
[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);
}
我尝试从
r.LatestData
获取结果,但我得到 r.LatestData
为空。为什么为空?
您的代码返回 null,因为 Linq2Db 在实现过程中不考虑关联(仅当您手动指出时)。这样做是为了: 1)避免循环(正如你所记得的,没有沉重的DataContext - 所以它每次都会创建新类) 2)优化查询(不进行不必要的连接)。 所以在你的样本中你必须写:
r=context.Requests.LoadWith(request=>
request.LatestData).FirstOrDefault();