插入

插入方式

 1.1 根据实体插入

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

//插入返回自增列
db.Insertable(insertObj).ExecuteReturnIdentity();
 
//如果需要获取数据库时间我们可以用  
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).AS("student").ExecuteCommand();

 1.3 根据Datatable插入

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


插入的返回类型

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


功能案例

  1.1 不插入Name testId

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

 1.2 只插入  Name and SchoolId

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

 1.3 NULL列不插入

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

 1.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; }

 1.5 异步

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

 1.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)

无限级联插入: http://donet5.com/Ask/9/11125


 1.7 大数据插入

 注意:数据量不大不建议使用,特别是循环处理性能非常低下,适合一次性插入大量数据

 1.7.1  SqlServer

 无需其它配置

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

 1.7.2 MySql

 高版本MySql.Data需要配置 AllowLoadLocalInfile=true

db.Insertable(insertObjs).UseMySql().ExecuteBlueCopy();//MySql 最新版本支持


1.8 分页插入

当list比较大的时候 我们可以设置PageSize进行分页插入,特别像ORACLE 和 MYSQL数据库插入有上限

db.Utilities.PageEach(allList, 10000 ,pageList=> {
  db.Insertable(pageList).ExecuteCommand();
});

 1.9 插入默认值

public class Order
{
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }

        public string Name { get; set; }
        public decimal Price { get; set; }
        [SugarColumn(IsOnlyIgnoreInsert =true)]//设置后插入会取数据库默认值
        public DateTime CreateTime { get; set; }
}

2.0 Guid主键自动赋值

只要设置为主键,并且C#类型是Guid 只要不传值,会自动赋值