C# 具有SQLite的LinqToDB-引用属性为null
我在一个相对简单的域模型上有一些POCO。一个例子如下所示: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)
[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