如何在linq2db中使用关联

时间:2015-06-16 19:33:09

标签: c# database orm linq2db

我尝试将linq2db与firebird sql server一起使用。 我有两张桌子,这些桌子都有用。

    [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 为null 为什么我得到r.LatestData = null?

1 个答案:

答案 0 :(得分:3)

您的代码返回null,因为Linq2Db在实现过程中不会在帐户中进行关联(仅当您手动指出时)。这样做是为了: 1)避免循环(因为你记得没有繁重的DataContext - 所以它每次创建新类) 2)优化查询(不进行不必要的连接)。 所以在你的样本中你必须写:

r=context.Requests.LoadWith(request=>
request.LatestData).FirstOrDefault();
相关问题