Update Storageable

This commit is contained in:
skx 2021-02-19 21:37:04 +08:00
parent 6489241d74
commit 99d64a9ea7
3 changed files with 28 additions and 4 deletions

View File

@ -11,8 +11,9 @@ namespace OrmTest
public static void Insert()
{
var db = Db;
db.DbMaintenance.TruncateTable<UinitBlukTable>();
db.CodeFirst.InitTables<UinitBlukTable>();
db.DbMaintenance.TruncateTable<UinitBlukTable>();
db.Insertable(new List<UinitBlukTable>
{
new UinitBlukTable(){ Id=1,Create=DateTime.Now, Name="00" },
@ -66,8 +67,8 @@ namespace OrmTest
db.DbMaintenance.TruncateTable<UinitBlukTable>();
db.Insertable(new UinitBlukTable() { Id = 2, Name = "b", Create = DateTime.Now }).ExecuteCommand();
var x=Db.Storageable(list2)
.SplitInsert(it => it.NotAny(y=>y.Id==it.Item.Id))
.SplitUpdate(it => it.Any(y => y.Id == it.Item.Id))
.SplitInsert(it => it.NotAny())
.SplitUpdate(it => it.Any())
.SplitDelete(it=>it.Item.Id>10)
.SplitIgnore(it=>it.Item.Id==1)
.SplitError(it => it.Item.Id == 3,"id不能等于3")

View File

@ -62,6 +62,7 @@ namespace SqlSugar
public StorageableResult<T> ToStorage()
{
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
if (this.allDatas.Count == 0)
return new StorageableResult<T>();
var pkInfos = this.Context.EntityMaintenance.GetEntityInfo<T>().Columns.Where(it => it.IsPrimarykey);
@ -76,10 +77,12 @@ namespace SqlSugar
dbDataList.AddRange(addItems);
});
}
var pkProperties = GetPkProperties(pkInfos, entity);
var messageList = allDatas.Select(it => new StorageableMessage<T>()
{
Item = it.Item,
Database = dbDataList
Database = dbDataList,
PkFields= pkProperties
}).ToList();
foreach (var item in whereFuncs.OrderByDescending(it => (int)it.key))
{
@ -120,6 +123,12 @@ namespace SqlSugar
return result;
}
private string[] GetPkProperties(IEnumerable<EntityColumnInfo> pkInfos,EntityInfo entity)
{
return entity.Columns
.Where(it => it.IsPrimarykey||pkInfos.Any(y=>y.PropertyName==it.PropertyName)).Select(it => it.PropertyName).ToArray();
}
public IStorageable<T> WhereColumns(Expression<Func<T, object>> columns)
{
if (columns == null)

View File

@ -22,6 +22,7 @@ namespace SqlSugar
{
public T Item { get; set; }
internal List<T> Database { get; set; }
internal string[] PkFields { get; set; }
public bool Any(Func<T,bool> expression)
{
return Database.Any(expression);
@ -30,6 +31,19 @@ namespace SqlSugar
{
return !Database.Any(expression);
}
public bool Any()
{
var list = Database.Where(it=>true);
foreach (var pk in PkFields)
{
list = list.Where(it => it.GetType().GetProperty(pk).GetValue(it, null).ObjToString() == Item.GetType().GetProperty(pk).GetValue(Item, null).ObjToString());
}
return list.Any();
}
public bool NotAny()
{
return !Any();
}
}
public class StorageableMessage<T> : StorageableInfo<T> where T : class, new()