- 修复 SqlServer DbFirst、CodeFirst 查询实体表的列信息错误,当设置了表/列多个扩展属性时发生;

- 修复 SqlServer2005 CodeFirst 迁移时,不支持 SET (LOCK_ESCALATION TABLE) 的错误(已做适配);
- 修复 SqlServer2005 批量插入SQL语法错误,不支持 Values(),()(已做适配);
- 完善 SqlServer2005 环境跑通了所有单元测试;
This commit is contained in:
28810
2019-11-19 00:38:34 +08:00
parent acd406164a
commit d6010b4b51
34 changed files with 598 additions and 480 deletions

View File

@ -106,27 +106,29 @@ ELSE
protected override string GetComparisonDDLStatements(params (Type entityType, string tableName)[] objects)
{
var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5));
var database = conn.Value.Database;
Func<string, string, object> ExecuteScalar = (db, sql) =>
{
if (string.Compare(database, db) != 0) conn.Value.ChangeDatabase(db);
try
{
using (var cmd = conn.Value.CreateCommand())
{
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
return cmd.ExecuteScalar();
}
}
finally
{
if (string.Compare(database, db) != 0) conn.Value.ChangeDatabase(database);
}
};
var sb = new StringBuilder();
string database = null;
try
{
database = conn.Value.Database;
Func<string, string, object> ExecuteScalar = (db, sql) =>
{
if (string.Compare(database, db) != 0) conn.Value.ChangeDatabase(db);
try
{
using (var cmd = conn.Value.CreateCommand())
{
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
return cmd.ExecuteScalar();
}
}
finally
{
if (string.Compare(database, db) != 0) conn.Value.ChangeDatabase(database);
}
};
var sb = new StringBuilder();
foreach (var obj in objects)
{
if (sb.Length > 0) sb.Append("\r\n");
@ -243,10 +245,9 @@ a.name 'Column'
else '' end as 'SqlType'
,case when a.is_nullable = 1 then '1' else '0' end 'IsNullable'
,case when a.is_identity = 1 then '1' else '0' end 'IsIdentity'
,c.value
,(select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.column_id AND name = 'MS_Description') 'Comment'
from sys.columns a
inner join sys.types b on b.user_type_id = a.user_type_id
left join sys.extended_properties AS c ON c.major_id = a.object_id AND c.minor_id = a.column_id
left join sys.tables d on d.object_id = a.object_id
left join sys.schemas e on e.schema_id = d.schema_id
where a.object_id in (object_id(N'[{1}].[{2}]'));
@ -377,7 +378,8 @@ use " + database, tboldname ?? tbname);
if (string.IsNullOrEmpty(tbcol.Comment) == false)
AddOrUpdateMS_Description(sb, tbname[1], $"FreeSqlTmp_{tbname[2]}", tbcol.Attribute.Name, tbcol.Comment);
}
sb.Append("ALTER TABLE ").Append(tmptablename).Append(" SET (LOCK_ESCALATION = TABLE);\r\n");
if ((_commonUtils as OdbcSqlServerUtils).ServerVersion > 9) //SqlServer 2008+
sb.Append("ALTER TABLE ").Append(tmptablename).Append(" SET (LOCK_ESCALATION = TABLE);\r\n");
if (idents) sb.Append("SET IDENTITY_INSERT ").Append(tmptablename).Append(" ON;\r\n");
sb.Append("IF EXISTS(SELECT 1 FROM ").Append(tablename).Append(")\r\n");
sb.Append("\tEXEC('INSERT INTO ").Append(tmptablename).Append(" (");
@ -426,7 +428,8 @@ use " + database, tboldname ?? tbname);
{
try
{
conn.Value.ChangeDatabase(database);
if (string.IsNullOrEmpty(database) == false)
conn.Value.ChangeDatabase(database);
_orm.Ado.MasterPool.Return(conn);
}
catch