如何在 linq2db 中使用关联

本文关键字:关联 linq2db | 更新日期: 2023-09-27 17:56:48

我尝试将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);
        }

我得到d,它有结果,在我尝试从r.LatestData获取结果之后,但我得到r.LatestData为空为什么我得到 r.LatestData = null?

如何在 linq2db 中使用关联

您的代码返回 null,因为 Linq2Db 在具体化期间不考虑关联(仅当您手动指出时)。这样做是为了:1)避免循环(你记得没有沉重的DataContext,所以每次都会创建新类)2) 优化查询(不进行不必要的连接)。因此,在您的示例中,您必须编写:

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