110,502
社区成员
发帖
与我相关
我的任务
分享
public class Test
{
[Key]
public int Id { get; set; }
public int? Pid { get; set; }
public string Name { get; set; }
public virtual Test Father { get; set; }
public ICollection<Test> Childs { get; set; }
}
Context:
public class TestContext : DbContext
{
public DbSet<Test> Tests { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Test>().HasKey(t => t.Id);
modelBuilder.Entity<Test>()
.HasMany(t => t.Childs)
.WithOptional(t => t.Father)
.HasForeignKey(t => t.Pid);
}
}
使用
private void button1_Click(object sender, EventArgs e)
{
using (var context = new TestContext())
{
//Test parenet = new Test() { Father = null, Name = "aa" };
//context.Tests.Add(parenet);
//Test child = new Test() { Father = parenet, Name = "bbb" };
//context.Tests.Add(child);
//Test grandChild = new Test() { Father = child, Name = "ccccccc" };
//context.Tests.Add(grandChild);
//context.SaveChanges();
foreach (var t in context.Tests.Include("Childs"))
{
foreach (var child1 in t.Childs)
{
Console.WriteLine("{0}, {1}, {2}", child1.Id, child1.Pid, child1.Name);
}
Console.WriteLine("{0}, {1}, {2}", t.Id, t.Pid, t.Name);
}
}
注意,insert代码被注释掉了,它只需要被运行一次。
如果你需要我的测试工程,可以给我邮件。