Reputation: 3932
I have a table of links, and some links will be child links, referencing the parent links ID however i can not get my head around servicestack ormlite and populating a property of children, will all the child links when getting a list of all links.
Here is my model:
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; }
}
any ideas ?
Upvotes: 1
Views: 1932
Reputation: 7005
You can do that using inheritance. The parent class will contain a reference to the child class. I had to use it to get which user have created each user. Here is a sample:
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; }
}
Something you need to pay attention to is to include the Id
in the child class not the parent. The table that will be generated is as follow. The foreign key is a self reference
Getting the list of children should be as easy as a simple LINQ query that will fetch all children for a certain parent Guid. CreatedBy
is also a property of User
becuase of inheritance.
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.
Upvotes: 4
Reputation: 143284
Tables in OrmLite are strictly a 1:1 mapping with the underlying db tables.
This means all complex type properties are blobbed into a db text field with the property name, they're never used to auto-map to child relations as you're expecting to do here.
Here's an early answer that shows how you could map many to many relations with OrmLite.
Upvotes: 0