2014-10-07 85 views
0

我有一个相对简单的域模型上的几个POCO。一个例子是这样的:LinqToDB与SQLite的参考属性为空

[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文件中指定MemberName对于他们建议。

的问题是,当我抢我的标签对象中的一个,所有的关联属性为null - 该ParentID的相关标签是正确的,它只是似乎并不映射到ParentChildren像我期望的属性。

我在这里做错了什么吗?我已经仔细检查过数据库本身。 .tt看起来像这样:

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

回答

0

这就是我如何克服这个问题 - 请注意我使用的是Access数据库。

[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 '< '的IEnumerable' <' 帐户>>。

用法:

using (var db = new DbMain()) 
{ 
    var q = from c in db.Customers 
      select c.Accounts; 

    System.Diagnostics.Debug.Print(q.ToList()[0].AccountID); 
} 
+0

感谢您的回答!然而,我不确定这与我自己的设置有何不同。无论哪种情况,我都决定放弃LinqToDB,但这些信息可能对其他人有用。 :) – robhol 2014-11-14 11:59:14