mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 优化 ICodeFirst.SyncStructure 错误提示,当使用不可迁移实体时;
This commit is contained in:
parent
5a69128807
commit
d54b245ba5
@ -9,6 +9,7 @@ using NpgsqlTypes;
|
|||||||
using Npgsql.LegacyPostgis;
|
using Npgsql.LegacyPostgis;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
namespace FreeSql.Tests {
|
namespace FreeSql.Tests {
|
||||||
public class UnitTest1 {
|
public class UnitTest1 {
|
||||||
@ -112,9 +113,24 @@ namespace FreeSql.Tests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TestEnumable : IEnumerable<TestEnumable> {
|
||||||
|
public IEnumerator<TestEnumable> GetEnumerator() {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator IEnumerable.GetEnumerator() {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Test1() {
|
public void Test1() {
|
||||||
|
|
||||||
|
g.sqlite.CodeFirst.SyncStructure<TestEnumable>();
|
||||||
|
|
||||||
|
var TestEnumable = new TestEnumable();
|
||||||
|
|
||||||
|
|
||||||
g.sqlite.GetRepository<Model1, int>().Insert(new Model1 {
|
g.sqlite.GetRepository<Model1, int>().Insert(new Model1 {
|
||||||
title = "test_" + DateTime.Now.ToString("yyyyMMddHHmmss"),
|
title = "test_" + DateTime.Now.ToString("yyyyMMddHHmmss"),
|
||||||
M2Id = DateTime.Now.Second + DateTime.Now.Minute,
|
M2Id = DateTime.Now.Second + DateTime.Now.Minute,
|
||||||
|
@ -35,7 +35,7 @@ namespace FreeSql.Internal {
|
|||||||
var tbc = _cacheGetTableByEntity.GetOrAdd(common._orm.Ado.DataType, k1 => new ConcurrentDictionary<Type, TableInfo>()); //区分数据库类型缓存
|
var tbc = _cacheGetTableByEntity.GetOrAdd(common._orm.Ado.DataType, k1 => new ConcurrentDictionary<Type, TableInfo>()); //区分数据库类型缓存
|
||||||
if (tbc.TryGetValue(entity, out var trytb)) return trytb;
|
if (tbc.TryGetValue(entity, out var trytb)) return trytb;
|
||||||
if (common.CodeFirst.GetDbInfo(entity) != null) return null;
|
if (common.CodeFirst.GetDbInfo(entity) != null) return null;
|
||||||
if (typeof(IEnumerable).IsAssignableFrom(entity)) return null;
|
if (typeof(IEnumerable).IsAssignableFrom(entity) && entity.IsGenericParameter == true) return null;
|
||||||
if (entity.IsArray) return null;
|
if (entity.IsArray) return null;
|
||||||
|
|
||||||
var tbattr = common.GetEntityTableAttribute(entity);
|
var tbattr = common.GetEntityTableAttribute(entity);
|
||||||
|
@ -106,6 +106,8 @@ namespace FreeSql.MySql {
|
|||||||
foreach (var entityType in entityTypes) {
|
foreach (var entityType in entityTypes) {
|
||||||
if (sb.Length > 0) sb.Append("\r\n");
|
if (sb.Length > 0) sb.Append("\r\n");
|
||||||
var tb = _commonUtils.GetTableByEntity(entityType);
|
var tb = _commonUtils.GetTableByEntity(entityType);
|
||||||
|
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
|
||||||
|
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
|
||||||
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
||||||
if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
|
||||||
|
|
||||||
@ -126,7 +128,7 @@ namespace FreeSql.MySql {
|
|||||||
}
|
}
|
||||||
if (tboldname == null) {
|
if (tboldname == null) {
|
||||||
//创建表
|
//创建表
|
||||||
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
|
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
||||||
sb.Append(tbcol.Attribute.DbType);
|
sb.Append(tbcol.Attribute.DbType);
|
||||||
@ -233,7 +235,7 @@ where a.constraint_schema IN ({0}) and a.table_name IN ({1})", tboldname ?? tbna
|
|||||||
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
|
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
|
||||||
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
|
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
|
||||||
//创建临时表
|
//创建临时表
|
||||||
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" (");
|
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
||||||
sb.Append(tbcol.Attribute.DbType);
|
sb.Append(tbcol.Attribute.DbType);
|
||||||
|
@ -88,6 +88,8 @@ namespace FreeSql.Oracle {
|
|||||||
foreach (var entityType in entityTypes) {
|
foreach (var entityType in entityTypes) {
|
||||||
if (sb.Length > 0) sb.Append("\r\n");
|
if (sb.Length > 0) sb.Append("\r\n");
|
||||||
var tb = _commonUtils.GetTableByEntity(entityType);
|
var tb = _commonUtils.GetTableByEntity(entityType);
|
||||||
|
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
|
||||||
|
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
|
||||||
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
||||||
if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
|
||||||
|
|
||||||
@ -107,7 +109,7 @@ namespace FreeSql.Oracle {
|
|||||||
}
|
}
|
||||||
if (tboldname == null) {
|
if (tboldname == null) {
|
||||||
//创建表
|
//创建表
|
||||||
sb.Append("execute immediate 'CREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
|
sb.Append("execute immediate 'CREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
||||||
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
||||||
@ -226,7 +228,7 @@ and a.owner in ({0}) and a.table_name in ({1})", tboldname ?? tbname);
|
|||||||
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
|
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
|
||||||
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FTmp_{tbname[1]}");
|
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FTmp_{tbname[1]}");
|
||||||
//创建临时表
|
//创建临时表
|
||||||
sb.Append("execute immediate 'CREATE TABLE ").Append(tmptablename).Append(" (");
|
sb.Append("execute immediate 'CREATE TABLE ").Append(tmptablename).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
||||||
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
||||||
|
@ -131,6 +131,8 @@ namespace FreeSql.PostgreSQL {
|
|||||||
foreach (var entityType in entityTypes) {
|
foreach (var entityType in entityTypes) {
|
||||||
if (sb.Length > 0) sb.Append("\r\n");
|
if (sb.Length > 0) sb.Append("\r\n");
|
||||||
var tb = _commonUtils.GetTableByEntity(entityType);
|
var tb = _commonUtils.GetTableByEntity(entityType);
|
||||||
|
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
|
||||||
|
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
|
||||||
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
||||||
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
||||||
|
|
||||||
@ -150,7 +152,7 @@ namespace FreeSql.PostgreSQL {
|
|||||||
}
|
}
|
||||||
if (tboldname == null) {
|
if (tboldname == null) {
|
||||||
//创建表
|
//创建表
|
||||||
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
|
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
||||||
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
||||||
@ -283,7 +285,7 @@ where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contyp
|
|||||||
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
|
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
|
||||||
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
|
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
|
||||||
//创建临时表
|
//创建临时表
|
||||||
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" (");
|
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
|
||||||
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
|
||||||
|
@ -98,6 +98,8 @@ namespace FreeSql.SqlServer {
|
|||||||
foreach (var entityType in entityTypes) {
|
foreach (var entityType in entityTypes) {
|
||||||
if (sb.Length > 0) sb.Append("\r\n");
|
if (sb.Length > 0) sb.Append("\r\n");
|
||||||
var tb = _commonUtils.GetTableByEntity(entityType);
|
var tb = _commonUtils.GetTableByEntity(entityType);
|
||||||
|
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
|
||||||
|
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
|
||||||
var tbname = tb.DbName.Split(new[] { '.' }, 3);
|
var tbname = tb.DbName.Split(new[] { '.' }, 3);
|
||||||
if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] };
|
||||||
if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] };
|
if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] };
|
||||||
@ -123,7 +125,7 @@ namespace FreeSql.SqlServer {
|
|||||||
}
|
}
|
||||||
if (tboldname == null) {
|
if (tboldname == null) {
|
||||||
//创建新表
|
//创建新表
|
||||||
sb.Append("use ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(";\r\nCREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[1]}.{tbname[2]}")).Append(" (");
|
sb.Append("use ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(";\r\nCREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[1]}.{tbname[2]}")).Append(" ( ");
|
||||||
var pkidx = 0;
|
var pkidx = 0;
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
||||||
@ -254,7 +256,7 @@ use " + database, tboldname ?? tbname);
|
|||||||
.Append("COMMIT\r\n");
|
.Append("COMMIT\r\n");
|
||||||
sb.Append("BEGIN TRANSACTION;\r\n");
|
sb.Append("BEGIN TRANSACTION;\r\n");
|
||||||
//创建临时表
|
//创建临时表
|
||||||
sb.Append("CREATE TABLE ").Append(tmptablename).Append(" (");
|
sb.Append("CREATE TABLE ").Append(tmptablename).Append(" ( ");
|
||||||
var pkidx2 = 0;
|
var pkidx2 = 0;
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
||||||
|
@ -83,6 +83,8 @@ namespace FreeSql.Sqlite {
|
|||||||
foreach (var entityType in entityTypes) {
|
foreach (var entityType in entityTypes) {
|
||||||
if (sb.Length > 0) sb.Append("\r\n");
|
if (sb.Length > 0) sb.Append("\r\n");
|
||||||
var tb = _commonUtils.GetTableByEntity(entityType);
|
var tb = _commonUtils.GetTableByEntity(entityType);
|
||||||
|
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
|
||||||
|
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
|
||||||
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
var tbname = tb.DbName.Split(new[] { '.' }, 2);
|
||||||
if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
|
||||||
|
|
||||||
@ -100,7 +102,7 @@ namespace FreeSql.Sqlite {
|
|||||||
}
|
}
|
||||||
if (tboldname == null) {
|
if (tboldname == null) {
|
||||||
//创建表
|
//创建表
|
||||||
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
|
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
||||||
sb.Append(tbcol.Attribute.DbType);
|
sb.Append(tbcol.Attribute.DbType);
|
||||||
@ -200,7 +202,7 @@ namespace FreeSql.Sqlite {
|
|||||||
//创建临时表
|
//创建临时表
|
||||||
//创建表
|
//创建表
|
||||||
isIndent = false;
|
isIndent = false;
|
||||||
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" (");
|
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
|
||||||
sb.Append(tbcol.Attribute.DbType);
|
sb.Append(tbcol.Attribute.DbType);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user