Skip to content

Commit d54b245

Browse files
2881028810
authored andcommitted
- 优化 ICodeFirst.SyncStructure 错误提示,当使用不可迁移实体时;
1 parent 5a69128 commit d54b245

File tree

7 files changed

+37
-11
lines changed

7 files changed

+37
-11
lines changed

FreeSql.Tests/UnitTest1.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Npgsql.LegacyPostgis;
1010
using System.Linq.Expressions;
1111
using System.Threading.Tasks;
12+
using System.Collections;
1213

1314
namespace FreeSql.Tests {
1415
public class UnitTest1 {
@@ -112,9 +113,24 @@ public class Model2 {
112113

113114
}
114115

116+
public class TestEnumable : IEnumerable<TestEnumable> {
117+
public IEnumerator<TestEnumable> GetEnumerator() {
118+
throw new NotImplementedException();
119+
}
120+
121+
IEnumerator IEnumerable.GetEnumerator() {
122+
throw new NotImplementedException();
123+
}
124+
}
125+
115126
[Fact]
116127
public void Test1() {
117128

129+
g.sqlite.CodeFirst.SyncStructure<TestEnumable>();
130+
131+
var TestEnumable = new TestEnumable();
132+
133+
118134
g.sqlite.GetRepository<Model1, int>().Insert(new Model1 {
119135
title = "test_" + DateTime.Now.ToString("yyyyMMddHHmmss"),
120136
M2Id = DateTime.Now.Second + DateTime.Now.Minute,

FreeSql/Internal/UtilsExpressionTree.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ internal static TableInfo GetTableByEntity(Type entity, CommonUtils common) {
3535
var tbc = _cacheGetTableByEntity.GetOrAdd(common._orm.Ado.DataType, k1 => new ConcurrentDictionary<Type, TableInfo>()); //区分数据库类型缓存
3636
if (tbc.TryGetValue(entity, out var trytb)) return trytb;
3737
if (common.CodeFirst.GetDbInfo(entity) != null) return null;
38-
if (typeof(IEnumerable).IsAssignableFrom(entity)) return null;
38+
if (typeof(IEnumerable).IsAssignableFrom(entity) && entity.IsGenericParameter == true) return null;
3939
if (entity.IsArray) return null;
4040

4141
var tbattr = common.GetEntityTableAttribute(entity);

FreeSql/MySql/MySqlCodeFirst.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
106106
foreach (var entityType in entityTypes) {
107107
if (sb.Length > 0) sb.Append("\r\n");
108108
var tb = _commonUtils.GetTableByEntity(entityType);
109+
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
110+
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
109111
var tbname = tb.DbName.Split(new[] { '.' }, 2);
110112
if (tbname?.Length == 1) tbname = new[] { database, tbname[0] };
111113

@@ -126,7 +128,7 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
126128
}
127129
if (tboldname == null) {
128130
//创建表
129-
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
131+
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
130132
foreach (var tbcol in tb.Columns.Values) {
131133
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
132134
sb.Append(tbcol.Attribute.DbType);
@@ -233,7 +235,7 @@ from information_schema.key_column_usage a
233235
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
234236
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
235237
//创建临时表
236-
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" (");
238+
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
237239
foreach (var tbcol in tb.Columns.Values) {
238240
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
239241
sb.Append(tbcol.Attribute.DbType);

FreeSql/Oracle/OracleCodeFirst.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
8888
foreach (var entityType in entityTypes) {
8989
if (sb.Length > 0) sb.Append("\r\n");
9090
var tb = _commonUtils.GetTableByEntity(entityType);
91+
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
92+
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
9193
var tbname = tb.DbName.Split(new[] { '.' }, 2);
9294
if (tbname?.Length == 1) tbname = new[] { userId, tbname[0] };
9395

@@ -107,7 +109,7 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
107109
}
108110
if (tboldname == null) {
109111
//创建表
110-
sb.Append("execute immediate 'CREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
112+
sb.Append("execute immediate 'CREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
111113
foreach (var tbcol in tb.Columns.Values) {
112114
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
113115
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
@@ -226,7 +228,7 @@ and a.constraint_type in ('U')
226228
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
227229
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FTmp_{tbname[1]}");
228230
//创建临时表
229-
sb.Append("execute immediate 'CREATE TABLE ").Append(tmptablename).Append(" (");
231+
sb.Append("execute immediate 'CREATE TABLE ").Append(tmptablename).Append(" ( ");
230232
foreach (var tbcol in tb.Columns.Values) {
231233
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
232234
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));

FreeSql/PostgreSQL/PostgreSQLCodeFirst.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
131131
foreach (var entityType in entityTypes) {
132132
if (sb.Length > 0) sb.Append("\r\n");
133133
var tb = _commonUtils.GetTableByEntity(entityType);
134+
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
135+
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
134136
var tbname = tb.DbName.Split(new[] { '.' }, 2);
135137
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
136138

@@ -150,7 +152,7 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
150152
}
151153
if (tboldname == null) {
152154
//创建表
153-
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
155+
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
154156
foreach (var tbcol in tb.Columns.Values) {
155157
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
156158
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));
@@ -283,7 +285,7 @@ from pg_index a
283285
var tablename = tboldname == null ? _commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}") : _commonUtils.QuoteSqlName($"{tboldname[0]}.{tboldname[1]}");
284286
var tmptablename = _commonUtils.QuoteSqlName($"{tbname[0]}.FreeSqlTmp_{tbname[1]}");
285287
//创建临时表
286-
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" (");
288+
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
287289
foreach (var tbcol in tb.Columns.Values) {
288290
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ").Append(tbcol.Attribute.DbType).Append(",");
289291
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, true));

FreeSql/SqlServer/SqlServerCodeFirst.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
9898
foreach (var entityType in entityTypes) {
9999
if (sb.Length > 0) sb.Append("\r\n");
100100
var tb = _commonUtils.GetTableByEntity(entityType);
101+
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
102+
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
101103
var tbname = tb.DbName.Split(new[] { '.' }, 3);
102104
if (tbname?.Length == 1) tbname = new[] { database, "dbo", tbname[0] };
103105
if (tbname?.Length == 2) tbname = new[] { database, tbname[0], tbname[1] };
@@ -123,7 +125,7 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
123125
}
124126
if (tboldname == null) {
125127
//创建新表
126-
sb.Append("use ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(";\r\nCREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[1]}.{tbname[2]}")).Append(" (");
128+
sb.Append("use ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(";\r\nCREATE TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[1]}.{tbname[2]}")).Append(" ( ");
127129
var pkidx = 0;
128130
foreach (var tbcol in tb.Columns.Values) {
129131
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
@@ -254,7 +256,7 @@ from sys.index_columns a
254256
.Append("COMMIT\r\n");
255257
sb.Append("BEGIN TRANSACTION;\r\n");
256258
//创建临时表
257-
sb.Append("CREATE TABLE ").Append(tmptablename).Append(" (");
259+
sb.Append("CREATE TABLE ").Append(tmptablename).Append(" ( ");
258260
var pkidx2 = 0;
259261
foreach (var tbcol in tb.Columns.Values) {
260262
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");

FreeSql/Sqlite/SqliteCodeFirst.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
8383
foreach (var entityType in entityTypes) {
8484
if (sb.Length > 0) sb.Append("\r\n");
8585
var tb = _commonUtils.GetTableByEntity(entityType);
86+
if (tb == null) throw new Exception($"类型 {entityType.FullName} 不可迁移");
87+
if (tb.Columns.Any() == false) throw new Exception($"类型 {entityType.FullName} 不可迁移,可迁移属性0个");
8688
var tbname = tb.DbName.Split(new[] { '.' }, 2);
8789
if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
8890

@@ -100,7 +102,7 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
100102
}
101103
if (tboldname == null) {
102104
//创建表
103-
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" (");
105+
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ( ");
104106
foreach (var tbcol in tb.Columns.Values) {
105107
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
106108
sb.Append(tbcol.Attribute.DbType);
@@ -200,7 +202,7 @@ public string GetComparisonDDLStatements(params Type[] entityTypes) {
200202
//创建临时表
201203
//创建表
202204
isIndent = false;
203-
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" (");
205+
sb.Append("CREATE TABLE IF NOT EXISTS ").Append(tmptablename).Append(" ( ");
204206
foreach (var tbcol in tb.Columns.Values) {
205207
sb.Append(" \r\n ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" ");
206208
sb.Append(tbcol.Attribute.DbType);

0 commit comments

Comments
 (0)