mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 FreeSqlBuilder UseSeedData 设定 CodeFirst 种子数据;
This commit is contained in:
parent
6ea5c5d103
commit
e5cbd407cb
@ -65,7 +65,24 @@ namespace base_entity
|
|||||||
//.UseConnectionString(FreeSql.DataType.OdbcOracle, "Driver={Oracle in XE};Server=//127.0.0.1:1521/XE;Persist Security Info=False;Trusted_Connection=Yes;UID=odbc1;PWD=123456")
|
//.UseConnectionString(FreeSql.DataType.OdbcOracle, "Driver={Oracle in XE};Server=//127.0.0.1:1521/XE;Persist Security Info=False;Trusted_Connection=Yes;UID=odbc1;PWD=123456")
|
||||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
||||||
|
|
||||||
.UseConnectionString(FreeSql.DataType.OdbcDameng, "Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789")
|
//.UseConnectionString(FreeSql.DataType.OdbcDameng, "Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236;Persist Security Info=False;Trusted_Connection=Yes;UID=USER1;PWD=123456789")
|
||||||
|
|
||||||
|
.UseMonitorCommand(cmd => Console.Write(cmd.CommandText))
|
||||||
|
.UseSeedData(sd => sd
|
||||||
|
.Apply(new[]
|
||||||
|
{
|
||||||
|
new Products { Id = 1, title = "product-1" },
|
||||||
|
new Products { Id = 2, title = "product-2" },
|
||||||
|
new Products { Id = 3, title = "product-3" },
|
||||||
|
new Products { Id = 4, title = "product-4" }
|
||||||
|
})
|
||||||
|
.Apply(new[]
|
||||||
|
{
|
||||||
|
new S_SysConfig<TestConfig> { Name = "testkey11", Config = new TestConfig { clicks = 11, title = "testtitle11" } },
|
||||||
|
new S_SysConfig<TestConfig> { Name = "testkey22", Config = new TestConfig { clicks = 22, title = "testtitle22" } },
|
||||||
|
new S_SysConfig<TestConfig> { Name = "testkey33", Config = new TestConfig { clicks = 33, title = "testtitle33" } }
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
.UseLazyLoading(true)
|
.UseLazyLoading(true)
|
||||||
.Build();
|
.Build();
|
||||||
|
@ -25,8 +25,7 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
var tkeyType = typeof(TKey)?.NullableTypeOrThis();
|
var tkeyType = typeof(TKey)?.NullableTypeOrThis();
|
||||||
if (tkeyType == typeof(int) || tkeyType == typeof(long))
|
if (tkeyType == typeof(int) || tkeyType == typeof(long))
|
||||||
Orm.CodeFirst.ConfigEntity(typeof(TEntity),
|
BaseEntity.ConfigEntity(typeof(TEntity), t => t.Property("Id").IsIdentity(true));
|
||||||
t => t.Property("Id").IsIdentity(true));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -21,8 +21,7 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
var tkeyType = typeof(TKey)?.NullableTypeOrThis();
|
var tkeyType = typeof(TKey)?.NullableTypeOrThis();
|
||||||
if (tkeyType == typeof(int) || tkeyType == typeof(long))
|
if (tkeyType == typeof(int) || tkeyType == typeof(long))
|
||||||
Orm.CodeFirst.ConfigEntity(typeof(TEntity),
|
BaseEntity.ConfigEntity(typeof(TEntity), t => t.Property("Id").IsIdentity(true));
|
||||||
t => t.Property("Id").IsIdentity(true));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -4,6 +4,7 @@ using FreeSql.DataAnnotations;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -18,7 +19,7 @@ namespace FreeSql
|
|||||||
[Table(DisableSyncStructure = true)]
|
[Table(DisableSyncStructure = true)]
|
||||||
public abstract class BaseEntity
|
public abstract class BaseEntity
|
||||||
{
|
{
|
||||||
static IFreeSql _ormPriv;
|
internal static IFreeSql _ormPriv;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 全局 IFreeSql orm 对象
|
/// 全局 IFreeSql orm 对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -42,6 +43,32 @@ namespace FreeSql
|
|||||||
{
|
{
|
||||||
_ormPriv = fsql;
|
_ormPriv = fsql;
|
||||||
_ormPriv.Aop.CurdBefore += (s, e) => Trace.WriteLine($"\r\n线程{Thread.CurrentThread.ManagedThreadId}: {e.Sql}\r\n");
|
_ormPriv.Aop.CurdBefore += (s, e) => Trace.WriteLine($"\r\n线程{Thread.CurrentThread.ManagedThreadId}: {e.Sql}\r\n");
|
||||||
|
if (_configEntityQueues.Any())
|
||||||
|
{
|
||||||
|
lock (_configEntityLock)
|
||||||
|
{
|
||||||
|
while (_configEntityQueues.TryDequeue(out var cei))
|
||||||
|
_ormPriv.CodeFirst.ConfigEntity(cei.EntityType, cei.Fluent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConfigEntityInfo
|
||||||
|
{
|
||||||
|
public Type EntityType;
|
||||||
|
public Action<TableFluent> Fluent;
|
||||||
|
}
|
||||||
|
static ConcurrentQueue<ConfigEntityInfo> _configEntityQueues = new ConcurrentQueue<ConfigEntityInfo>();
|
||||||
|
static object _configEntityLock = new object();
|
||||||
|
internal static void ConfigEntity(Type entityType, Action<TableFluent> fluent)
|
||||||
|
{
|
||||||
|
lock (_configEntityLock)
|
||||||
|
{
|
||||||
|
if (_ormPriv == null)
|
||||||
|
_configEntityQueues.Enqueue(new ConfigEntityInfo { EntityType = entityType, Fluent = fluent });
|
||||||
|
else
|
||||||
|
_ormPriv.CodeFirst.ConfigEntity(entityType, fluent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -217,15 +217,6 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
|
||||||
<summary>
|
|
||||||
批量注入 Repository,可以参考代码自行调整
|
|
||||||
</summary>
|
|
||||||
<param name="services"></param>
|
|
||||||
<param name="globalDataFilter"></param>
|
|
||||||
<param name="assemblies"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="P:FreeSql.IBaseRepository.Orm">
|
<member name="P:FreeSql.IBaseRepository.Orm">
|
||||||
<summary>
|
<summary>
|
||||||
注意:IFreeSql 属于顶级对象,事务无法自动传递。<para></para>
|
注意:IFreeSql 属于顶级对象,事务无法自动传递。<para></para>
|
||||||
|
@ -690,20 +690,6 @@
|
|||||||
<param name="value">true:运行时检查自动同步结构, false:不同步结构</param>
|
<param name="value">true:运行时检查自动同步结构, false:不同步结构</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.FreeSqlBuilder.UseSyncStructureToLower(System.Boolean)">
|
|
||||||
<summary>
|
|
||||||
转小写同步结构
|
|
||||||
</summary>
|
|
||||||
<param name="value">true:转小写, false:不转</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.FreeSqlBuilder.UseSyncStructureToUpper(System.Boolean)">
|
|
||||||
<summary>
|
|
||||||
转大写同步结构
|
|
||||||
</summary>
|
|
||||||
<param name="value">true:转大写, false:不转</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.FreeSqlBuilder.UseConfigEntityFromDbFirst(System.Boolean)">
|
<member name="M:FreeSql.FreeSqlBuilder.UseConfigEntityFromDbFirst(System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。<para></para>
|
将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。<para></para>
|
||||||
@ -746,6 +732,36 @@
|
|||||||
<param name="executed">执行后,可监视执行性能</param>
|
<param name="executed">执行后,可监视执行性能</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.FreeSqlBuilder.UseNameConvert(FreeSql.Internal.NameConvertType)">
|
||||||
|
<summary>
|
||||||
|
实体类名 -> 数据库表名,命名转换(类名、属性名都生效)<para></para>
|
||||||
|
优先级小于 [Table(Name = "xxx")]、[Column(Name = "xxx")]
|
||||||
|
</summary>
|
||||||
|
<param name="convertType"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.FreeSqlBuilder.UseSeedData(System.Action{FreeSql.FreeSqlBuilder.SeedDataBuilder})">
|
||||||
|
<summary>
|
||||||
|
CodeFirst 初始化种子数据<para></para>
|
||||||
|
表数据为空时,创建设定的种子数据
|
||||||
|
</summary>
|
||||||
|
<param name="sd"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.FreeSqlBuilder.UseSyncStructureToLower(System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
转小写同步结构
|
||||||
|
</summary>
|
||||||
|
<param name="value">true:转小写, false:不转</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.FreeSqlBuilder.UseSyncStructureToUpper(System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
转大写同步结构
|
||||||
|
</summary>
|
||||||
|
<param name="value">true:转大写, false:不转</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSql.FreeSqlBuilder.UseEntityPropertyNameConvert(FreeSql.Internal.StringConvertType)">
|
<member name="M:FreeSql.FreeSqlBuilder.UseEntityPropertyNameConvert(FreeSql.Internal.StringConvertType)">
|
||||||
<summary>
|
<summary>
|
||||||
自动转换实体属性名称 Entity Property -> Db Filed
|
自动转换实体属性名称 Entity Property -> Db Filed
|
||||||
@ -755,14 +771,6 @@
|
|||||||
<param name="convertType"></param>
|
<param name="convertType"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.FreeSqlBuilder.UseNameConvert(FreeSql.Internal.NameConvertType)">
|
|
||||||
<summary>
|
|
||||||
实体类名 -> 数据库表名,命名转换(类名、属性名都生效)<para></para>
|
|
||||||
优先级小于 [Table(Name = "xxx")]、[Column(Name = "xxx")]
|
|
||||||
</summary>
|
|
||||||
<param name="convertType"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IDelete`1.WithTransaction(System.Data.Common.DbTransaction)">
|
<member name="M:FreeSql.IDelete`1.WithTransaction(System.Data.Common.DbTransaction)">
|
||||||
<summary>
|
<summary>
|
||||||
指定事务对象
|
指定事务对象
|
||||||
@ -2309,137 +2317,6 @@
|
|||||||
<param name="parms"></param>
|
<param name="parms"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
|
|
||||||
</summary>
|
|
||||||
<param name="readerHander"></param>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
查询
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
查询
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
查询
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行
|
|
||||||
</summary>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行
|
|
||||||
</summary>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 })
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T"></typeparam>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T"></typeparam>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T1"></typeparam>
|
|
||||||
<param name="cmdType"></param>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="cmdParms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object)">
|
|
||||||
<summary>
|
|
||||||
执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new { age = 25 })
|
|
||||||
</summary>
|
|
||||||
<typeparam name="T1"></typeparam>
|
|
||||||
<param name="cmdText"></param>
|
|
||||||
<param name="parms"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="E:FreeSql.IAop.ParseExpression">
|
<member name="E:FreeSql.IAop.ParseExpression">
|
||||||
<summary>
|
<summary>
|
||||||
可自定义解析表达式
|
可自定义解析表达式
|
||||||
@ -2963,12 +2840,6 @@
|
|||||||
<param name="timeout">超时</param>
|
<param name="timeout">超时</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
|
|
||||||
<summary>
|
|
||||||
获取资源
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
|
<member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
使用完毕后,归还资源
|
使用完毕后,归还资源
|
||||||
@ -3039,12 +2910,6 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="obj">资源对象</param>
|
<param name="obj">资源对象</param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetAsync(FreeSql.Internal.ObjectPool.Object{`0})">
|
|
||||||
<summary>
|
|
||||||
从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
|
|
||||||
</summary>
|
|
||||||
<param name="obj">资源对象</param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
|
<member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
|
||||||
<summary>
|
<summary>
|
||||||
归还对象给对象池的时候触发
|
归还对象给对象池的时候触发
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@ -7,7 +8,7 @@ using FreeSql.Internal;
|
|||||||
|
|
||||||
namespace FreeSql
|
namespace FreeSql
|
||||||
{
|
{
|
||||||
public class FreeSqlBuilder
|
public partial class FreeSqlBuilder
|
||||||
{
|
{
|
||||||
DataType _dataType;
|
DataType _dataType;
|
||||||
string _masterConnectionString;
|
string _masterConnectionString;
|
||||||
@ -79,28 +80,6 @@ namespace FreeSql
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 转小写同步结构
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="value">true:转小写, false:不转</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[Obsolete("请使用 UseNameConvert(NameConvertType.ToLower),或者 fsql.CodeFirst.IsSyncStructureToLower = value")]
|
|
||||||
public FreeSqlBuilder UseSyncStructureToLower(bool value)
|
|
||||||
{
|
|
||||||
_isSyncStructureToLower = value;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// 转大写同步结构
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="value">true:转大写, false:不转</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[Obsolete("请使用 UseNameConvert(NameConvertType.ToUpper),或者 fsql.CodeFirst.IsSyncStructureToUpper = value")]
|
|
||||||
public FreeSqlBuilder UseSyncStructureToUpper(bool value)
|
|
||||||
{
|
|
||||||
_isSyncStructureToUpper = value;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。<para></para>
|
/// 将数据库的主键、自增、索引设置导入,适用 DbFirst 模式,无须在实体类型上设置 [Column(IsPrimary)] 或者 ConfigEntity。此功能目前可用于 mysql/sqlserver/postgresql/oracle。<para></para>
|
||||||
/// 本功能会影响 IFreeSql 首次访问的速度。<para></para>
|
/// 本功能会影响 IFreeSql 首次访问的速度。<para></para>
|
||||||
/// 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
|
/// 若使用 CodeFirst 创建索引后,又直接在数据库上建了索引,若无本功能下一次 CodeFirst 迁移时数据库上创建的索引将被删除
|
||||||
@ -159,20 +138,6 @@ namespace FreeSql
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 自动转换实体属性名称 Entity Property -> Db Filed
|
|
||||||
/// <para></para>
|
|
||||||
/// *不会覆盖 [Column] 特性设置的Name
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="convertType"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[Obsolete("请使用 UseNameConvert 功能")]
|
|
||||||
public FreeSqlBuilder UseEntityPropertyNameConvert(StringConvertType convertType)
|
|
||||||
{
|
|
||||||
_entityPropertyConvertType = convertType;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 实体类名 -> 数据库表名,命名转换(类名、属性名都生效)<para></para>
|
/// 实体类名 -> 数据库表名,命名转换(类名、属性名都生效)<para></para>
|
||||||
/// 优先级小于 [Table(Name = "xxx")]、[Column(Name = "xxx")]
|
/// 优先级小于 [Table(Name = "xxx")]、[Column(Name = "xxx")]
|
||||||
@ -276,32 +241,7 @@ namespace FreeSql
|
|||||||
_aopCommandExecuted?.Invoke(e.Command, e.Log);
|
_aopCommandExecuted?.Invoke(e.Command, e.Log);
|
||||||
});
|
});
|
||||||
|
|
||||||
//添加实体属性名全局AOP转换处理
|
this.EntityPropertyNameConvert(ret);
|
||||||
if (_entityPropertyConvertType != StringConvertType.None)
|
|
||||||
{
|
|
||||||
string PascalCaseToUnderScore(string str) => string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
|
|
||||||
|
|
||||||
switch (_entityPropertyConvertType)
|
|
||||||
{
|
|
||||||
case StringConvertType.Lower:
|
|
||||||
ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToLower();
|
|
||||||
break;
|
|
||||||
case StringConvertType.Upper:
|
|
||||||
ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToUpper();
|
|
||||||
break;
|
|
||||||
case StringConvertType.PascalCaseToUnderscore:
|
|
||||||
ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name);
|
|
||||||
break;
|
|
||||||
case StringConvertType.PascalCaseToUnderscoreWithLower:
|
|
||||||
ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToLower();
|
|
||||||
break;
|
|
||||||
case StringConvertType.PascalCaseToUnderscoreWithUpper:
|
|
||||||
ret.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToUpper();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//添加实体属性名全局AOP转换处理
|
//添加实体属性名全局AOP转换处理
|
||||||
if (_nameConvertType != NameConvertType.None)
|
if (_nameConvertType != NameConvertType.None)
|
||||||
{
|
{
|
||||||
@ -362,9 +302,70 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//SeedData
|
||||||
|
if (_seedData != null && _seedData._data.Any())
|
||||||
|
{
|
||||||
|
ret.Aop.SyncStructureAfter += new EventHandler<Aop.SyncStructureAfterEventArgs>((s, e) =>
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(e.Sql)) return;
|
||||||
|
foreach (var et in e.EntityTypes)
|
||||||
|
{
|
||||||
|
if (_seedData._data.TryGetValue(et, out var sd) == false) continue;
|
||||||
|
if (sd.Any() == false) continue;
|
||||||
|
if (ret.Select<object>().AsType(et).Any()) continue;
|
||||||
|
ret.Insert<object>()
|
||||||
|
.AsType(et)
|
||||||
|
.NoneParameter()
|
||||||
|
.InsertIdentity()
|
||||||
|
.AppendData(sd.ToArray())
|
||||||
|
.ExecuteAffrows();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
foreach (var sd in _seedData._data)
|
||||||
|
{
|
||||||
|
ret.CodeFirst.SyncStructure(sd.Key);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class SeedDataBuilder
|
||||||
|
{
|
||||||
|
internal Dictionary<Type, List<object>> _data = new Dictionary<Type, List<object>>();
|
||||||
|
public SeedDataBuilder Apply<T>(T data) where T : class
|
||||||
|
{
|
||||||
|
if (_data.TryGetValue(typeof(T), out var ds) == false)
|
||||||
|
_data.Add(typeof(T), ds = new List<object>());
|
||||||
|
ds.Add(data);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public SeedDataBuilder Apply<T>(T[] data) where T : class
|
||||||
|
{
|
||||||
|
return this.Apply(data as IEnumerable<T>);
|
||||||
|
}
|
||||||
|
public SeedDataBuilder Apply<T>(IEnumerable<T> data) where T : class
|
||||||
|
{
|
||||||
|
foreach (var d in data) this.Apply(d);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SeedDataBuilder _seedData;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// CodeFirst 初始化种子数据<para></para>
|
||||||
|
/// 表数据为空时,创建设定的种子数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sd"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public FreeSqlBuilder UseSeedData(Action<SeedDataBuilder> sd)
|
||||||
|
{
|
||||||
|
_seedData = new SeedDataBuilder();
|
||||||
|
sd?.Invoke(_seedData);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
80
FreeSql/FreeSqlBuilder_Obsolete.cs
Normal file
80
FreeSql/FreeSqlBuilder_Obsolete.cs
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
using System;
|
||||||
|
using System.Data.Common;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using FreeSql.DataAnnotations;
|
||||||
|
using FreeSql.Internal;
|
||||||
|
|
||||||
|
namespace FreeSql
|
||||||
|
{
|
||||||
|
partial class FreeSqlBuilder
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 转小写同步结构
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value">true:转小写, false:不转</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[Obsolete("请使用 UseNameConvert(NameConvertType.ToLower),或者 fsql.CodeFirst.IsSyncStructureToLower = value")]
|
||||||
|
public FreeSqlBuilder UseSyncStructureToLower(bool value)
|
||||||
|
{
|
||||||
|
_isSyncStructureToLower = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 转大写同步结构
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value">true:转大写, false:不转</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[Obsolete("请使用 UseNameConvert(NameConvertType.ToUpper),或者 fsql.CodeFirst.IsSyncStructureToUpper = value")]
|
||||||
|
public FreeSqlBuilder UseSyncStructureToUpper(bool value)
|
||||||
|
{
|
||||||
|
_isSyncStructureToUpper = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自动转换实体属性名称 Entity Property -> Db Filed
|
||||||
|
/// <para></para>
|
||||||
|
/// *不会覆盖 [Column] 特性设置的Name
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="convertType"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[Obsolete("请使用 UseNameConvert 功能")]
|
||||||
|
public FreeSqlBuilder UseEntityPropertyNameConvert(StringConvertType convertType)
|
||||||
|
{
|
||||||
|
_entityPropertyConvertType = convertType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityPropertyNameConvert(IFreeSql fsql)
|
||||||
|
{
|
||||||
|
//添加实体属性名全局AOP转换处理
|
||||||
|
if (_entityPropertyConvertType != StringConvertType.None)
|
||||||
|
{
|
||||||
|
string PascalCaseToUnderScore(string str) => string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));
|
||||||
|
|
||||||
|
switch (_entityPropertyConvertType)
|
||||||
|
{
|
||||||
|
case StringConvertType.Lower:
|
||||||
|
fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToLower();
|
||||||
|
break;
|
||||||
|
case StringConvertType.Upper:
|
||||||
|
fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = e.Property.Name.ToUpper();
|
||||||
|
break;
|
||||||
|
case StringConvertType.PascalCaseToUnderscore:
|
||||||
|
fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name);
|
||||||
|
break;
|
||||||
|
case StringConvertType.PascalCaseToUnderscoreWithLower:
|
||||||
|
fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToLower();
|
||||||
|
break;
|
||||||
|
case StringConvertType.PascalCaseToUnderscoreWithUpper:
|
||||||
|
fsql.Aop.ConfigEntityProperty += (_, e) => e.ModifyResult.Name = PascalCaseToUnderScore(e.Property.Name).ToUpper();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user