首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有LinqToDB引用属性的SQLite为空

具有LinqToDB引用属性的SQLite为空
EN

Stack Overflow用户
提问于 2014-10-07 06:56:33
回答 2查看 2.2K关注 0票数 0

我在一个相对简单的域模型上有几个POCOs。有一个例子如下:

代码语言:javascript
复制
[Table("Tag")]
public partial class Tag
{
    [PrimaryKey, NotNull    ] public string Name        { get; set; } // varchar(128)
    [Column,        Nullable] public string Description { get; set; } // text(2147483647)
    [Column,        Nullable] public string ParentID    { get; set; } // varchar(128)

    #region Associations

    /// <summary>
    /// FK_Tag_0_0
    /// </summary>
    [Association(ThisKey="ParentID", OtherKey="Name", CanBeNull=true)]
    public Tag Parent { get; set; }

    /// <summary>
    /// FK_TagObjects_0_0_BackReference
    /// </summary>
    [Association(ThisKey="Name", OtherKey="TagID", CanBeNull=true)]
    public List<TagObject> ObjectLinks { get; set; }

    /// <summary>
    /// FK_TagSynonyms_0_0_BackReference
    /// </summary>
    [Association(ThisKey="Name", OtherKey="TagID", CanBeNull=true)]
    public List<TagSynonym> SynonymLinks { get; set; }

    /// <summary>
    /// FK_Tag_0_0_BackReference
    /// </summary>
    [Association(ThisKey="Name", OtherKey="ParentID", CanBeNull=true)]
    public List<Tag> Children { get; set; }

    #endregion
}

FKs的名称很奇怪,但我根据自述文件的建议,在.tt文件中为它们指定了.tt s。

问题是,当我获取一个标记对象时,所有关联属性都是空的--相关标记的ParentID是正确的,它似乎没有像我所期望的那样映射到ParentChildren属性。

我在这里做错什么了吗?我已经检查了数据库本身。.tt看起来如下所示:

代码语言:javascript
复制
NamespaceName = "MyProg.Models";
GenerateBackReferences   = true;
OneToManyAssociationType = "List<{0}>";

LoadSQLiteMetadata(@"C:\my\path", "my.db");

var k = GetFK("Tag", "FK_Tag_0_0");
k.MemberName = "Parent";
k.BackReference.MemberName = "Children";

GenerateModel();
EN

回答 2

Stack Overflow用户

发布于 2018-11-17 14:33:09

在linq2db中,关联定义表之间的关系。它们有助于使用关联属性导航来构建跨表LINQ查询,而不是使用LINQ的笨拙的联接语法(对我来说)。

如果需要使用select上的数据填充关联属性,则必须使用LoadWith方法在查询中显式地指定它:

var tagsWithChildren = db.Tags.LoadWith(t => t.Children).ToList();

在这里的测试中可以找到更多的例子:https://github.com/linq2db/linq2db/blob/master/Tests/Linq/Linq/LoadWithTests.cs

票数 4
EN

Stack Overflow用户

发布于 2014-11-13 12:31:14

这就是我克服这个问题的方法--请注意,我使用的是Access db。

代码语言:javascript
复制
[Table(Name = "Customers")]
public class Customer
{
    [PrimaryKey, Identity]
    public int CompanyID { get; set; }

    [Column(Name="CompanyName"), NotNull]
    public string Name { get; set; }

    [Association(OtherKey = "CompanyID", ThisKey = "CompanyID", CanBeNull = true)]
    public Account Accounts { get; set; }
}

当关联返回类型是IEnumrable时,下面的用法是返回一个IQueryable‘<’IEnumrable‘<’Account>>。

用法:

代码语言:javascript
复制
using (var db = new DbMain())
{
     var q = from c in db.Customers
             select c.Accounts;

     System.Diagnostics.Debug.Print(q.ToList()[0].AccountID);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26230253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档