1

我有一个链接表,一些链接将是子链接,引用父链接 ID 但是我无法理解 servicestack ormlite 并填充子属性,当获取所有链接列表时,所有子链接将。

这是我的模型:

public partial class Navigation
{
   [Alias("Id"), AutoIncrement]
   public int Id  { get; set; }

   [Alias("ParentId")]
   [Display( Name = "ParentId")]
   [References(typeof(Navigation))]
   public int? ParentId  { get; set; }

   [Alias("LinkText")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "LinkText")]
   public string LinkText  { get; set; }

   [Alias("Action")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "Action")]
   public string Action  { get; set; }

   [Alias("Controller")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "Controller")]
   public string Controller  { get; set; }

   [Alias("Area")]
   [StringLength(50, ErrorMessage = " Must be no more than 50 characters long!")]
   [Display( Name = "Area")]
   public string Area  { get; set; }

   [Alias("Visible")]
   [Display( Name = "Visible"),Required(ErrorMessage = " is required" )]
   public bool Visible  { get; set; }

   [Alias("Sequence")]
   [Display( Name = "Sequence")]
   public int? Sequence  { get; set; }

   [ForeignKey(typeof(Navigation))]
   public virtual ICollection<Navigation> Children { get; set; }
}

有任何想法吗 ?

4

2 回答 2

4

您可以使用继承来做到这一点。父类将包含对子类的引用。我必须用它来获取哪个用户创建了每个用户。这是一个示例:

public class UserCommon
{
    [References(typeof(User))] // Self reference workaround for User ;)
    public Guid CreatedBy { get; set; }
}

public class User : UserCommon
{
    public Guid Uid { get; set; }
    public String Username { get; set; }
    public String Password { get; set; }
}

您需要注意的是将 包含Id在子类而不是父类中。将生成的表如下。外键是自引用

生成的表

获取子列表应该像一个简单的 LINQ 查询一样简单,它将获取某个父 Guid 的所有子。CreatedBy也是User因为继承的属性。

db.Select<User>(q => q.CreatedBy == '734FD814-024D-4795-AFD0-34FECF89A13A');
// Just a sample Guid, you should be able to select
// the Guid you need and insert it here.
于 2013-01-29T23:43:30.503 回答
0

OrmLite 中的表是与底层数据库表的严格1:1 映射。

这意味着所有复杂类型的属性都被放入带有属性名称的 db 文本字段中,它们永远不会像您在这里期望的那样自动映射到子关系。

这是一个早期的答案,显示了如何映射与 OrmLite 的多对多关系

于 2012-11-17T17:11:04.410 回答