mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
AggregateRootRepository
This commit is contained in:
parent
d5024068a1
commit
5bbbeb16c2
@ -140,8 +140,12 @@ namespace FreeSql
|
|||||||
foreach (var item in collectionAfter as IEnumerable)
|
foreach (var item in collectionAfter as IEnumerable)
|
||||||
{
|
{
|
||||||
var key = fsql.GetEntityKeyString(elementType, item, false);
|
var key = fsql.GetEntityKeyString(elementType, item, false);
|
||||||
if (key != null) tracking.InsertLog.Add(NativeTuple.Create(elementType, item));
|
if (key != null)
|
||||||
else dictAfter.Add(key, item);
|
{
|
||||||
|
if (dictAfter.ContainsKey(key) == false)
|
||||||
|
dictAfter.Add(key, item);
|
||||||
|
}
|
||||||
|
else tracking.InsertLog.Add(NativeTuple.Create(elementType, item));
|
||||||
}
|
}
|
||||||
foreach (var key in dictBefore.Keys.ToArray())
|
foreach (var key in dictBefore.Keys.ToArray())
|
||||||
{
|
{
|
||||||
@ -230,7 +234,7 @@ namespace FreeSql
|
|||||||
if (middleValues == null) continue;
|
if (middleValues == null) continue;
|
||||||
statckPath.Push($"{prop.Name}[]");
|
statckPath.Push($"{prop.Name}[]");
|
||||||
stackValues.Add(middleValues);
|
stackValues.Add(middleValues);
|
||||||
callback?.Invoke(string.Join(".", statckPath), tbref, tbref.RefEntityType, stackValues);
|
callback?.Invoke(string.Join(".", statckPath), tbref, tbref.RefMiddleEntityType, stackValues);
|
||||||
stackValues.RemoveAt(stackValues.Count - 1);
|
stackValues.RemoveAt(stackValues.Count - 1);
|
||||||
statckPath.Pop();
|
statckPath.Pop();
|
||||||
break;
|
break;
|
||||||
|
@ -30,10 +30,10 @@ namespace FreeSql.Tests.DbContext2
|
|||||||
var code = AggregateRootUtils.GetAutoIncludeQueryStaicCode(fsql, typeof(Order));
|
var code = AggregateRootUtils.GetAutoIncludeQueryStaicCode(fsql, typeof(Order));
|
||||||
Assert.Equal(@"//fsql.Select<Order>()
|
Assert.Equal(@"//fsql.Select<Order>()
|
||||||
SelectDiy
|
SelectDiy
|
||||||
|
.Include(a => a.Extdata)
|
||||||
.IncludeMany(a => a.Details, then => then
|
.IncludeMany(a => a.Details, then => then
|
||||||
.Include(b => b.Extdata))
|
.Include(b => b.Extdata))
|
||||||
.IncludeMany(a => a.Tags)
|
.IncludeMany(a => a.Tags)", code);
|
||||||
.Include(a => a.Extdata)", code);
|
|
||||||
|
|
||||||
fsql.Insert(new[]
|
fsql.Insert(new[]
|
||||||
{
|
{
|
||||||
@ -45,6 +45,12 @@ SelectDiy
|
|||||||
}).ExecuteAffrows();
|
}).ExecuteAffrows();
|
||||||
|
|
||||||
var repo = fsql.GetAggregateRootRepository<Order>();
|
var repo = fsql.GetAggregateRootRepository<Order>();
|
||||||
|
var affrows = 0;
|
||||||
|
Order order2 = null;
|
||||||
|
|
||||||
|
LocalTest();
|
||||||
|
void LocalTest()
|
||||||
|
{
|
||||||
var order = new Order
|
var order = new Order
|
||||||
{
|
{
|
||||||
Field2 = "field2",
|
Field2 = "field2",
|
||||||
@ -59,7 +65,7 @@ SelectDiy
|
|||||||
};
|
};
|
||||||
repo.Insert(order); //级联插入
|
repo.Insert(order); //级联插入
|
||||||
|
|
||||||
var order2 = repo.Select.Where(a => a.Id == a.Id).First();
|
order2 = repo.Select.Where(a => a.Id == a.Id).First();
|
||||||
Assert.NotNull(order2);
|
Assert.NotNull(order2);
|
||||||
Assert.Equal(order.Id, order2.Id);
|
Assert.Equal(order.Id, order2.Id);
|
||||||
Assert.Equal(order.Field2, order2.Field2);
|
Assert.Equal(order.Field2, order2.Field2);
|
||||||
@ -67,8 +73,7 @@ SelectDiy
|
|||||||
Assert.Equal(order.Extdata.Field3, order2.Extdata.Field3);
|
Assert.Equal(order.Extdata.Field3, order2.Extdata.Field3);
|
||||||
Assert.NotNull(order2.Details);
|
Assert.NotNull(order2.Details);
|
||||||
Assert.Equal(order.Details.Count, order2.Details.Count);
|
Assert.Equal(order.Details.Count, order2.Details.Count);
|
||||||
Assert.Equal(3, order2.Details.Count);
|
for (var a = 0; a < order.Details.Count; a++)
|
||||||
for (var a = 0; a < 3; a++)
|
|
||||||
{
|
{
|
||||||
Assert.Equal(order.Details[a].Id, order2.Details[a].Id);
|
Assert.Equal(order.Details[a].Id, order2.Details[a].Id);
|
||||||
Assert.Equal(order.Details[a].OrderId, order2.Details[a].OrderId);
|
Assert.Equal(order.Details[a].OrderId, order2.Details[a].OrderId);
|
||||||
@ -77,11 +82,81 @@ SelectDiy
|
|||||||
Assert.Equal(order.Details[a].Extdata.Field5, order2.Details[a].Extdata.Field5);
|
Assert.Equal(order.Details[a].Extdata.Field5, order2.Details[a].Extdata.Field5);
|
||||||
}
|
}
|
||||||
Assert.NotNull(order2.Tags);
|
Assert.NotNull(order2.Tags);
|
||||||
Assert.Equal(3, order2.Tags.Count);
|
Assert.Equal(order.Tags.Count, order2.Tags.Count);
|
||||||
|
for (var a = 0; a < order.Tags.Count; a++)
|
||||||
|
Assert.Equal(order.Tags[a].Id, order2.Tags[a].Id);
|
||||||
Assert.Equal("tag1", order2.Tags[0].Name);
|
Assert.Equal("tag1", order2.Tags[0].Name);
|
||||||
Assert.Equal("tag2", order2.Tags[1].Name);
|
Assert.Equal("tag2", order2.Tags[1].Name);
|
||||||
Assert.Equal("tag3", order2.Tags[2].Name);
|
Assert.Equal("tag3", order2.Tags[2].Name);
|
||||||
|
|
||||||
|
order.Tags.Add(new Tag { Id = 4 });
|
||||||
|
order.Details.RemoveAt(1);
|
||||||
|
order.Details[0].Extdata.Field5 = "field5_01_01";
|
||||||
|
order.Field2 = "field2_02";
|
||||||
|
affrows = repo.Update(order);
|
||||||
|
Assert.Equal(5, affrows);
|
||||||
|
|
||||||
|
order2 = repo.Select.Where(a => a.Id == a.Id).First();
|
||||||
|
Assert.NotNull(order2);
|
||||||
|
Assert.Equal(order.Id, order2.Id);
|
||||||
|
Assert.Equal("field2_02", order2.Field2);
|
||||||
|
Assert.NotNull(order2.Extdata);
|
||||||
|
Assert.Equal(order.Extdata.Field3, order2.Extdata.Field3);
|
||||||
|
Assert.NotNull(order2.Details);
|
||||||
|
Assert.Equal(order.Details.Count, order2.Details.Count);
|
||||||
|
Assert.Equal(2, order2.Details.Count);
|
||||||
|
|
||||||
|
Assert.Equal(order.Details[0].Id, order2.Details[0].Id);
|
||||||
|
Assert.Equal(order.Details[0].OrderId, order2.Details[0].OrderId);
|
||||||
|
Assert.Equal("field4_01", order2.Details[0].Field4);
|
||||||
|
Assert.NotNull(order2.Details[0].Extdata);
|
||||||
|
Assert.Equal("field5_01_01", order2.Details[0].Extdata.Field5);
|
||||||
|
Assert.Equal(order.Details[1].Id, order2.Details[1].Id);
|
||||||
|
Assert.Equal(order.Details[1].OrderId, order2.Details[1].OrderId);
|
||||||
|
Assert.Equal("field4_03", order2.Details[1].Field4);
|
||||||
|
Assert.NotNull(order2.Details[1].Extdata);
|
||||||
|
Assert.Equal("field5_03", order2.Details[1].Extdata.Field5);
|
||||||
|
|
||||||
|
Assert.NotNull(order2.Tags);
|
||||||
|
Assert.Equal(4, order2.Tags.Count);
|
||||||
|
Assert.Equal("tag1", order2.Tags[0].Name);
|
||||||
|
Assert.Equal("tag2", order2.Tags[1].Name);
|
||||||
|
Assert.Equal("tag3", order2.Tags[2].Name);
|
||||||
|
Assert.Equal("tag4", order2.Tags[3].Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
affrows = repo.Delete(order2);
|
||||||
|
Assert.Equal(10, affrows);
|
||||||
|
Assert.False(fsql.Select<Order>().Where(a => a.Id == 1).Any());
|
||||||
|
Assert.False(fsql.Select<OrderExt>().Where(a => a.OrderId == 1).Any());
|
||||||
|
Assert.False(fsql.Select<OrderDetail>().Where(a => a.OrderId == 1).Any());
|
||||||
|
Assert.False(fsql.Select<OrderTag>().Where(a => a.OrderId == 1).Any());
|
||||||
|
Assert.False(fsql.Select<OrderDetailExt>().Any());
|
||||||
|
var tags = fsql.Select<Tag>().ToList();
|
||||||
|
Assert.Equal(5, tags.Count);
|
||||||
|
Assert.Equal("tag1", tags[0].Name);
|
||||||
|
Assert.Equal("tag2", tags[1].Name);
|
||||||
|
Assert.Equal("tag3", tags[2].Name);
|
||||||
|
Assert.Equal("tag4", tags[3].Name);
|
||||||
|
Assert.Equal("tag5", tags[4].Name);
|
||||||
|
|
||||||
|
LocalTest();
|
||||||
|
var deleted = repo.DeleteCascadeByDatabase(a => a.Id == 2);
|
||||||
|
Assert.NotNull(deleted);
|
||||||
|
Assert.Equal(10, deleted.Count);
|
||||||
|
Assert.False(fsql.Select<Order>().Where(a => a.Id == 2).Any());
|
||||||
|
Assert.False(fsql.Select<OrderExt>().Where(a => a.OrderId == 2).Any());
|
||||||
|
Assert.False(fsql.Select<OrderDetail>().Where(a => a.OrderId == 2).Any());
|
||||||
|
Assert.False(fsql.Select<OrderTag>().Where(a => a.OrderId == 2).Any());
|
||||||
|
Assert.False(fsql.Select<OrderDetailExt>().Any());
|
||||||
|
tags = fsql.Select<Tag>().ToList();
|
||||||
|
Assert.Equal(5, tags.Count);
|
||||||
|
Assert.Equal("tag1", tags[0].Name);
|
||||||
|
Assert.Equal("tag2", tags[1].Name);
|
||||||
|
Assert.Equal("tag3", tags[2].Name);
|
||||||
|
Assert.Equal("tag4", tags[3].Name);
|
||||||
|
Assert.Equal("tag5", tags[4].Name);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class Order
|
class Order
|
||||||
|
Loading…
x
Reference in New Issue
Block a user