插入

1、插入方式

1.1根据实体插入

//可以是 类 或者 List<类>
db.Insertable(insertObj).ExecuteCommand();

//如果需要获取数据库时间我们可以用  var dbTime = db.GetDate();


1.2根据字典插入

//可以是 Dictionary 或者 List<Dictionary >
var dc= new Dictionary<string, object>();
            dt.Add("name", "1");
            dt.Add("CreateTime", null);
db.Insertable(dc).ExecuteCommand();


1.3根据Datatable插入

Dictionary<string,object> dc= db.Utilities.DataTableToDictionary(dataTable);//转成字典就可以按上面的字典更新了
db.Insertable(dc).AS("student").ExecuteReturnIdentity();



2、插入的返回类型

方法名描述
ExecuteCommand返回数据库受影响的行数,例如查询返回0,更新0条返回0,更新1条返回1
ExecuteReturnIdentity返回自增列
ExecuteReturnBigIdentity同上
ExecuteReturnEntity返回实体
ExecuteCommandIdentityIntoEntity给传入实体添加自增列



3、更多例子

不插入Name testId

db.Insertable(insertObj).IgnoreColumns(it => new { it.Name, it.TestId }).ExecuteReturnIdentity();
db.Insertable(insertObj).IgnoreColumns( "Name","TestId").ExecuteReturnIdentity();


Only  insert  Name and SchoolId

db.Insertable(insertObj).InsertColumns(it => new { it.Name, it.SchoolId }).ExecuteReturnIdentity();
db.Insertable(insertObj).InsertColumns("Name","SchoolId").ExecuteReturnIdentity();


ignore null columns

db.Insertable(insertObj2).IgnoreColumns(ignoreNullColumn:true).ExecuteCommand();



4.给指定字段转成base64存储

[SugarColumn(IsTranscoding =true)]
public string Url { get; set; }
5.Entity Settings Non-Inserted Columns
[SqlSugar.SugarColumn(IsOnlyIgnoreInsert = true)]
public DateTime CreateTime { get; set; }


5. 异步

Db.Insertable(new Order() { Name = "a", CustomId = 1 }).ExecuteCommandAsync();


6、级联插入

//有自动赋值的外键
db.Insertable(new Order()
{
    Name = "订单 1",
        CustomId = 1,
        Price = 100,
        CreateTime = DateTime.Now,
        Id = 0,//自增列
        Items = new List<OrderItem>() {
                new OrderItem(){
                    CreateTime=DateTime.Now,
                    OrderId=0,//需要自动获取订单的自增列
                    Price=1,
                    ItemId=1
                }
            }
    })
    .AddSubList(it => it.Items.First().OrderId  )//设置item表的OrderId等于订单自增列
    .ExecuteReturnPrimaryKey();

//没有自动赋值的外键
db.Insertable(new Order()
{
    Name = "订单 1",
        CustomId = 1,
        Pid = 20,
        CreateTime = DateTime.Now,
        Id = 0,//自增列
        Items = new List<OrderItem>() {
                new OrderItem(){
                    CreateTime=DateTime.Now,
                    Pid=20,
                    ItemId=1
                }
            }
    })
    .AddSubList(it => it.Items)//items  直接插入,items是什么就插入什么
    .ExecuteReturnPrimaryKey();


//当然支持多个AddSubList
AddSubList(xx).AddSubList(xx)


7、大数据插入

除了SqlServer外其它数据库默认的批量插入速度都常快,只有SqlServer数据量非常大时需要BlueCopy,数据量不大不建议使用

db.Insertable(insertObjs).UseSqlServer().ExecuteBlueCopy();