mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 优化 IncludeMany 三级导航对象自动 _included;#1113
This commit is contained in:
parent
f300724210
commit
b49c487906
128
FreeSql.Tests/FreeSql.Tests/Issues/1113.cs
Normal file
128
FreeSql.Tests/FreeSql.Tests/Issues/1113.cs
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
using FreeSql.DataAnnotations;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace FreeSql.Tests.Issues
|
||||||
|
{
|
||||||
|
public class _1113
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void PadLeft()
|
||||||
|
{
|
||||||
|
using (var freeSql = new FreeSqlBuilder()
|
||||||
|
.UseConnectionString(DataType.Sqlite, "Data Source=:memory:;")
|
||||||
|
.UseAutoSyncStructure(true)
|
||||||
|
.Build())
|
||||||
|
{
|
||||||
|
freeSql.Aop.CurdBefore += (s, e) =>
|
||||||
|
{
|
||||||
|
Trace.WriteLine(e.Sql);
|
||||||
|
};
|
||||||
|
|
||||||
|
var company = new Company { Id = Guid.NewGuid(), Code = "CO001" };
|
||||||
|
var department = new Department { Id = Guid.NewGuid(), Code = "D001", CompanyId = company.Id };
|
||||||
|
var orgnization = new Orgnization { Code = "C001", CompanyId = company.Id };
|
||||||
|
freeSql.Insert(company).ExecuteAffrows();
|
||||||
|
freeSql.Insert(orgnization).ExecuteAffrows();
|
||||||
|
freeSql.Insert(department).ExecuteAffrows();
|
||||||
|
|
||||||
|
var materials = new[]
|
||||||
|
{
|
||||||
|
new Material{Code="TEST1",Units=new List<Unit>{new Unit{Code = "KG"}}},
|
||||||
|
new Material{Code="TEST2",Units=new List<Unit>{new Unit{Code = "KG"}}}
|
||||||
|
};
|
||||||
|
|
||||||
|
var repo1 = freeSql.GetGuidRepository<Material>();
|
||||||
|
repo1.DbContextOptions.EnableCascadeSave = true;
|
||||||
|
repo1.Insert(materials);
|
||||||
|
|
||||||
|
|
||||||
|
var order = new Order
|
||||||
|
{
|
||||||
|
Code = "X001",
|
||||||
|
OrgnizationId = orgnization.Id,
|
||||||
|
OrderItems = new List<OrderItem>
|
||||||
|
{
|
||||||
|
new OrderItem{ ItemCode = "01", MaterialId = materials[0].Id },
|
||||||
|
new OrderItem { ItemCode = "02", MaterialId = materials[1].Id },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var repo2 = freeSql.GetGuidRepository<Order>();
|
||||||
|
repo2.DbContextOptions.EnableCascadeSave = true;
|
||||||
|
repo2.Insert(order);
|
||||||
|
|
||||||
|
// 可以完整加载数据
|
||||||
|
var list1 = freeSql.Select<Orgnization>().IncludeMany(t => t.Company.Departments).ToList();
|
||||||
|
// 只能查询到Orgnization
|
||||||
|
var list2 = freeSql.Select<Order>().IncludeMany(t => t.Orgnization.Company.Departments).ToList();
|
||||||
|
//freeSql.Select<Order>().IncludeMany(t => t.OrderItems, then => then.IncludeMany(t => t.Material.Units)).ToList().Dump();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class Order
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Code { get; set; }
|
||||||
|
public Guid OrgnizationId { get; set; }
|
||||||
|
[Navigate(nameof(OrgnizationId))]
|
||||||
|
public Orgnization Orgnization { get; set; }
|
||||||
|
[Navigate(nameof(OrderItem.OrderId))]
|
||||||
|
public List<OrderItem> OrderItems { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class OrderItem
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string ItemCode { get; set; }
|
||||||
|
public Guid MaterialId { get; set; }
|
||||||
|
public Guid OrderId { get; set; }
|
||||||
|
[Navigate(nameof(MaterialId))]
|
||||||
|
public Material Material { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Orgnization
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Code { get; set; }
|
||||||
|
public Guid CompanyId { get; set; }
|
||||||
|
[Navigate(nameof(CompanyId))]
|
||||||
|
public Company Company { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Company
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Code { get; set; }
|
||||||
|
[Navigate(nameof(Department.CompanyId))]
|
||||||
|
public List<Department> Departments { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Department
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Code { get; set; }
|
||||||
|
public Guid CompanyId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Material
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Code { get; set; }
|
||||||
|
[Navigate(nameof(Unit.MaterialId))]
|
||||||
|
public List<Unit> Units { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Unit
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Code { get; set; }
|
||||||
|
public Guid MaterialId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -641,6 +641,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (tbref.Columns.Any() == false) throw throwNavigateSelector;
|
if (tbref.Columns.Any() == false) throw throwNavigateSelector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (members.Count >= 2) _isIncluded = true;
|
||||||
#if net40
|
#if net40
|
||||||
Action<object, bool> includeToListSyncOrAsync = (listObj, isAsync) =>
|
Action<object, bool> includeToListSyncOrAsync = (listObj, isAsync) =>
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user