mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-06-28 13:34:32 +08:00
188 lines
5.9 KiB
C#
188 lines
5.9 KiB
C#
using SqlSugar;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace OrmTest
|
||
{
|
||
|
||
public class UnitOneToMany123131
|
||
{
|
||
public static void Init()
|
||
{
|
||
var db = NewUnitTest.Db;
|
||
// db.DbMaintenance.DropTable< UnitNavLv1, UnitNavLv2, UnitNavLv3_1>();
|
||
try
|
||
{
|
||
db.CodeFirst.InitTables<Person, UnitNavLv1, UnitNavLv2, UnitNavLv3_1, UnitNavLv3_2>();
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
throw;
|
||
}
|
||
db.DbMaintenance.TruncateTable<Person, UnitNavLv1, UnitNavLv2, UnitNavLv3_1, UnitNavLv3_2>();
|
||
|
||
var person = new Person
|
||
{
|
||
Name = "John Doe"
|
||
};
|
||
|
||
var lv1Data = new UnitNavLv1
|
||
{
|
||
Name = "Level 1",
|
||
lv2s = new List<UnitNavLv2>
|
||
{
|
||
new UnitNavLv2
|
||
{
|
||
Name = "Level 2-1",
|
||
person = person,
|
||
lv3s_1 = new List<UnitNavLv3_1>
|
||
{
|
||
new UnitNavLv3_1 { Name = "Level 3-1" },
|
||
new UnitNavLv3_1 { Name = "Level 3-2" }
|
||
},
|
||
lv3s_2 = new List<UnitNavLv3_2>
|
||
{
|
||
new UnitNavLv3_2 { Name = "Level 3-3" }
|
||
}
|
||
},
|
||
new UnitNavLv2
|
||
{
|
||
Name = "Level 2-2",
|
||
lv3s_1 = new List<UnitNavLv3_1>
|
||
{
|
||
new UnitNavLv3_1 { Name = "Level 3-4" }
|
||
}
|
||
}
|
||
}
|
||
};
|
||
db.InsertNav(lv1Data)
|
||
.Include(x => x.lv2s)
|
||
.ThenInclude(x => x.lv3s_1)
|
||
.Include(x => x.lv2s, new InsertNavOptions() { OneToManyIfExistsNoInsert = true })
|
||
.ThenInclude(x => x.lv3s_2)
|
||
.Include(x => x.lv2s, new InsertNavOptions() { OneToManyIfExistsNoInsert = true })
|
||
.ThenInclude(x => x.person)
|
||
.ExecuteCommand();
|
||
// int addressId = db.InsertNav(lv1).Insertable(address).ExecuteReturnIdentity();
|
||
|
||
// // 创建 UnitPerson011 对象并插入记录
|
||
// var person = new UnitPerson011
|
||
// {
|
||
// Name = "John Doe",
|
||
// AddressId = addressId
|
||
// };
|
||
// int personId = db.Insertable(person).ExecuteReturnIdentity();
|
||
|
||
var list = db.Queryable<UnitNavLv1>()
|
||
// 导航2和3层,有多个3层,所以后面要多写下一次Include
|
||
.Includes(lv1 => lv1.lv2s.ToList(lv2 => new UnitNavLv2
|
||
{
|
||
// 模拟查指定字段
|
||
Name = lv2.Name,
|
||
personName1=lv2.person.Name
|
||
|
||
}), lv2 => lv2.lv3s_1.ToList(lv3 => new UnitNavLv3_1
|
||
{
|
||
// 模拟查指定字段
|
||
Name = lv3.Name
|
||
}))
|
||
// 问题1:只为了给2层导航另外一个3层,这里1和2层指定字段不需要多写一次ToList吧??
|
||
.Includes(lv1 => lv1.lv2s, lv2 => lv2.lv3s_2.ToList(lv3 => new UnitNavLv3_2
|
||
{
|
||
// 模拟查指定字段
|
||
Name = lv3.Name
|
||
}))
|
||
.Select(x1 => new
|
||
{
|
||
x1.Id,
|
||
x1.Name,
|
||
otherName = x1.lv2s
|
||
})
|
||
.ToList();
|
||
if (list.First().otherName[0].lv3s_1.Count() == 0)
|
||
{
|
||
throw new Exception("unit error");
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
public class UnitNavLv1
|
||
{
|
||
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||
public int Id { get; set; }
|
||
public string? Name { get; set; }
|
||
|
||
|
||
[SqlSugar.Navigate(SqlSugar.NavigateType.OneToMany, nameof(UnitNavLv2.lv1Id))]
|
||
public List<UnitNavLv2>? lv2s { get; set; }
|
||
}
|
||
|
||
public class UnitNavLv2
|
||
{
|
||
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||
public int Id { get; set; }
|
||
|
||
public string? Name { get; set; }
|
||
|
||
public int lv1Id { get; set; }
|
||
|
||
[SqlSugar.Navigate(SqlSugar.NavigateType.OneToMany, nameof(UnitNavLv3_1.lv2Id))]
|
||
public List<UnitNavLv3_1>? lv3s_1 { get; set; }
|
||
|
||
[SqlSugar.Navigate(SqlSugar.NavigateType.OneToMany, nameof(UnitNavLv3_2.lv2Id))]
|
||
public List<UnitNavLv3_2>? lv3s_2 { get; set; }
|
||
|
||
[SqlSugar.SugarColumn(IsNullable = true, DefaultValue = "0")]
|
||
public int? personId { get; set; }
|
||
|
||
[SqlSugar.Navigate(SqlSugar.NavigateType.OneToOne, nameof(personId))]
|
||
public Person? person { get; set; }
|
||
|
||
// 问题2:只查1个字段 这个怎么用?没有找到用例
|
||
[SqlSugar.SugarColumn(IsIgnore = true)]
|
||
public string? personName { get => person?.Name; }
|
||
|
||
[SqlSugar.SugarColumn(IsIgnore = true)]
|
||
public string? personName1 { get; set; }
|
||
}
|
||
|
||
public class UnitNavLv3_1
|
||
{
|
||
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||
public int Id { get; set; }
|
||
|
||
public int lv2Id { get; set; }
|
||
|
||
public string Name { get; set; }
|
||
|
||
}
|
||
|
||
public class UnitNavLv3_2
|
||
{
|
||
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||
public int Id { get; set; }
|
||
|
||
public int lv2Id { get; set; }
|
||
|
||
public string Name { get; set; }
|
||
|
||
}
|
||
|
||
[SugarTable("unitPerson1231s")]
|
||
public class Person
|
||
{
|
||
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||
public int Id { get; set; }
|
||
public string? Name { get; set; }
|
||
|
||
}
|
||
}
|