Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有SQLite的LinqToDB-引用属性为null_C#_.net_Sqlite_Orm_Linq2db - Fatal编程技术网

C# 具有SQLite的LinqToDB-引用属性为null

C# 具有SQLite的LinqToDB-引用属性为null,c#,.net,sqlite,orm,linq2db,C#,.net,Sqlite,Orm,Linq2db,我在一个相对简单的域模型上有一些POCO。一个例子如下所示: [Table("Tag")] public partial class Tag { [PrimaryKey, NotNull ] public string Name { get; set; } // varchar(128) [Column, Nullable] public string Description { get; set; } // text(2147483647)

我在一个相对简单的域模型上有一些POCO。一个例子如下所示:

[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
}
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();

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

[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'这就是我克服这个问题的方法-请注意,我使用的是Access db

[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; }
}

当关联返回类型为IEnumerable时,下面的用法是在linq2db关联定义表之间的关系中返回IQueryable“。它们使用关联属性导航来帮助构建跨表LINQ查询,而不是LINQ的笨拙(对我来说)连接语法

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

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


在这里的测试中可以找到更多示例:

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

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

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


更多的例子可以在这里的测试中找到:

谢谢你的回答!但是,我不确定这与我自己的设置有什么不同。在这两种情况下,我都决定放弃LinqToDB,但这些信息可能对其他人有用。:)谢谢你的回答!但是,我不确定这与我自己的设置有什么不同。在这两种情况下,我都决定放弃LinqToDB,但这些信息可能对其他人有用。:)这需要设置为
true
这需要设置为
true