比較的単純なドメイン モデルにいくつかの 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
}
FK の名前は奇妙MemberName
ですが、readme で提案されているように .tt ファイルでそれらに s を指定することでこれに対抗しました。
問題は、タグ オブジェクトの 1 つを取得すると、すべての関連付けプロパティが null になることです。関連するタグは正しいのですが、期待どおりにそれをまたはプロパティParentID
にマップしていないようです。Parent
Children
ここで何か間違ったことをしましたか?データベース自体を再確認しました。.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();