diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj
index fae89602..fa8d9d7e 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.csproj
+++ b/FreeSql.DbContext/FreeSql.DbContext.csproj
@@ -9,7 +9,7 @@
FreeSql ORM DbContext
git
MIT
- $(AssemblyName)
+ $(AssemblyName).NS
logo.png
$(AssemblyName)
true
@@ -17,7 +17,7 @@
true
key.snk
false
- 3.5.100-preview20240825
+ 3.5.100-preview20240825-ns1
readme.md
@@ -26,7 +26,7 @@
-
+
FreeSql.DbContext.xml
3
1701;1702;1591
diff --git a/FreeSql/DataAnnotations/TableAttribute.cs b/FreeSql/DataAnnotations/TableAttribute.cs
index 683e48dc..7ff97b28 100644
--- a/FreeSql/DataAnnotations/TableAttribute.cs
+++ b/FreeSql/DataAnnotations/TableAttribute.cs
@@ -9,7 +9,10 @@ using System.Text.RegularExpressions;
namespace FreeSql.DataAnnotations
{
- [AttributeUsage(AttributeTargets.Class)]
+
+ [AttributeUsage(AttributeTargets.Class
+ //禁用继承 nsnail@2022年11月23日14:38:45
+ , Inherited = false)]
public class TableAttribute : Attribute
{
@@ -419,4 +422,4 @@ namespace FreeSql.DataAnnotations
return this;
}
}
-}
+}
\ No newline at end of file
diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj
index 17785314..f3b54c92 100644
--- a/FreeSql/FreeSql.csproj
+++ b/FreeSql/FreeSql.csproj
@@ -10,6 +10,7 @@
git
MIT
FreeSql;ORM
+ $(AssemblyName).NS
logo.png
$(AssemblyName)
true
@@ -17,7 +18,7 @@
true
key.snk
false
- 3.5.100-preview20240825
+ 3.5.100-preview20240825-ns1
readme.md
@@ -67,7 +68,7 @@
-
+
FreeSql.xml
3
1701;1702;1591
diff --git a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs
index c3392942..5c2f3db8 100644
--- a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs
+++ b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs
@@ -226,7 +226,8 @@ namespace FreeSql.Internal.CommonProvider
if (_tableRule == null && _table.AsTableImpl == null) return _commonUtils.GetEntityTableAopName(_table, true);
var tbname = _table?.DbName ?? "";
string newname = null;
- if (_table.AsTableImpl != null)
+ // 对于已经配置了TableNameImpl的表,也支持AsTable重设表名 by nsnail@2024年8月26日11:10:22
+ if (_table.AsTableImpl != null && _tableRule == null)
{
if (_source.Any())
newname = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(_source.FirstOrDefault()));
diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs
index ab166af6..079df9af 100644
--- a/FreeSql/Internal/CommonProvider/InsertProvider.cs
+++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs
@@ -567,7 +567,8 @@ namespace FreeSql.Internal.CommonProvider
if (_tableRule == null && _table.AsTableImpl == null) return _commonUtils.GetEntityTableAopName(_table, true);
var tbname = _table?.DbName ?? "";
string newname = null;
- if (_table.AsTableImpl != null)
+ // 对于已经配置了TableNameImpl的表,也支持AsTable重设表名 by nsnail@2024年8月26日11:10:22
+ if (_table.AsTableImpl != null && _tableRule == null)
{
if (_source.Any())
newname = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(_source.FirstOrDefault()));
@@ -638,7 +639,7 @@ namespace FreeSql.Internal.CommonProvider
return sb.ToString();
}
}
-
+
sb.Append("INSERT INTO ").Append(_commonUtils.QuoteSqlName(TableRuleInvoke())).Append('(');
var colidx = 0;
foreach (var col in _table.Columns.Values)
@@ -735,4 +736,4 @@ namespace FreeSql.Internal.CommonProvider
return dt;
}
}
-}
+}
\ No newline at end of file
diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
index 003dae8b..d95b7d52 100644
--- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs
+++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
@@ -734,7 +734,7 @@ namespace FreeSql.Internal.CommonProvider
if (replval == null) continue;
var replname = _commonUtils.QuoteSqlName(col.Column.Attribute.Name);
expt = expt.Replace(replname, _commonUtils.IsNull(replname, _commonUtils.FormatSql("{0}", replval)));
- }
+ }
else if (col.Column.CsType == typeof(string))
{
var replname = _commonUtils.QuoteSqlName(col.Column.Attribute.Name);
@@ -898,7 +898,8 @@ namespace FreeSql.Internal.CommonProvider
if (_tableRule == null && _table.AsTableImpl == null) return _commonUtils.GetEntityTableAopName(_table, true);
var tbname = _table?.DbName ?? "";
string newname = null;
- if (_table.AsTableImpl != null)
+ // 对于已经配置了TableNameImpl的表,也支持AsTable重设表名 by nsnail@2024年8月26日11:10:22
+ if (_table.AsTableImpl != null && _tableRule == null)
{
if (_source.Any())
newname = _table.AsTableImpl.GetTableNameByColumnValue(_table.AsTableColumn.GetValue(_source.FirstOrDefault()));
@@ -1123,7 +1124,7 @@ namespace FreeSql.Internal.CommonProvider
sb.Append(col.DbUpdateValue);
else
{
- var valsameIf = col.Attribute.MapType.IsNumberType() ||
+ var valsameIf = col.Attribute.MapType.IsNumberType() ||
new[] { typeof(string), typeof(DateTime), typeof(DateTime?) }.Contains(col.Attribute.MapType) ||
col.Attribute.MapType.NullableTypeOrThis().IsEnum;
var ds = _source.Select(a => col.GetDbValue(a)).ToArray();
@@ -1269,4 +1270,4 @@ namespace FreeSql.Internal.CommonProvider
}
}
}
-}
+}
\ No newline at end of file
diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
index 4e3ac6cb..7ce00ef1 100644
--- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
+++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj
@@ -10,7 +10,7 @@
git
MIT
FreeSql;ORM;SqlServer;mssql
- $(AssemblyName)
+ $(AssemblyName).NS
logo.png
$(AssemblyName)
true
@@ -18,10 +18,16 @@
true
false
key.snk
- 3.5.100-preview20240825
+ 3.5.100-preview20240825-ns1
readme.md
+
+ FreeSql.Provider.SqlServer.xml
+ 3
+ 1701;1702;1591
+
+
diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs
index cecfc3c4..c9bf11dc 100644
--- a/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs
+++ b/Providers/FreeSql.Provider.SqlServer/SqlServerCodeFirst.cs
@@ -228,7 +228,17 @@ ELSE
if (tbcol.IsDesc) sb.Append(" DESC");
sb.Append(", ");
}
- sb.Remove(sb.Length - 2, 2).Append(");\r\n");
+ // sb.Remove(sb.Length - 2, 2).Append(");\r\n");
+ // ↑ 解决唯一索引不可插入多个NULL的问题 ↓
+ sb.Remove(sb.Length - 2, 2).Append(") WHERE ");
+ foreach (var tbcol in uk.Columns)
+ {
+ sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
+ sb.Append(" IS NOT NULL");
+ sb.Append(" AND ");
+ }
+ sb.Remove(sb.Length - 5, 5).Append(";\r\n");
+ // nsnail@2023年2月4日14:54:52 ↑
}
//备注
foreach (var tbcol in tb.ColumnsByPosition)
@@ -449,7 +459,17 @@ use [" + database + "];", tboldname ?? tbname);
if (tbcol.IsDesc) sb.Append(" DESC");
sb.Append(", ");
}
- sb.Remove(sb.Length - 2, 2).Append(");\r\n");
+ // sb.Remove(sb.Length - 2, 2).Append(");\r\n");
+ // ↑ 解决唯一索引不可插入多个NULL的问题 ↓
+ sb.Remove(sb.Length - 2, 2).Append(") WHERE ");
+ foreach (var tbcol in uk.Columns)
+ {
+ sb.Append(_commonUtils.QuoteSqlName(tbcol.Column.Attribute.Name));
+ sb.Append(" IS NOT NULL");
+ sb.Append(" AND ");
+ }
+ sb.Remove(sb.Length - 5, 5).Append(";\r\n");
+ // nsnail@2023年2月4日14:54:52 ↑
}
sb.Append("COMMIT;\r\n");
}
diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj
index c23ee441..523c4fec 100644
--- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj
+++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj
@@ -10,7 +10,7 @@
git
MIT
FreeSql;ORM;sqlite
- $(AssemblyName)
+ $(AssemblyName).NS
logo.png
$(AssemblyName)
true
@@ -18,10 +18,16 @@
true
key.snk
false
- 3.5.100-preview20240825
+ 3.5.100-preview20240825-ns1
readme.md
+
+ FreeSql.Provider.Sqlite.xml
+ 3
+ 1701;1702;1591
+
+
diff --git a/nuget/build-and-push.ps1 b/nuget/build-and-push.ps1
new file mode 100644
index 00000000..c13acf25
--- /dev/null
+++ b/nuget/build-and-push.ps1
@@ -0,0 +1,62 @@
+# 定义参数
+Param(
+ # Nuget APIKey
+ [string] $apikey
+)
+
+if ($apikey -eq $null -or $apikey -eq "")
+{
+ Write-Error "必须指定apiKey";
+ return;
+}
+
+rm -r ../FreeSql.DbContext/bin/Release
+dotnet build -c Release ../FreeSql.sln
+
+
+$files = Get-ChildItem -Path ../FreeSql/bin/Release -Filter *-ns*.nupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
+$files = Get-ChildItem -Path ../FreeSql/bin/Release -Filter *-ns*.snupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
+
+
+$files = Get-ChildItem -Path ../Providers/FreeSql.Provider.Sqlite/bin/Release -Filter *-ns*.nupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
+$files = Get-ChildItem -Path ../Providers/FreeSql.Provider.Sqlite/bin/Release -Filter *-ns*.snupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
+
+
+$files = Get-ChildItem -Path ../Providers/FreeSql.Provider.SqlServer/bin/Release -Filter *-ns*.nupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
+$files = Get-ChildItem -Path ../Providers/FreeSql.Provider.SqlServer/bin/Release -Filter *-ns*.snupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
+
+
+$files = Get-ChildItem -Path ../FreeSql.DbContext/bin/Release -Filter *-ns*.nupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
+$files = Get-ChildItem -Path ../FreeSql.DbContext/bin/Release -Filter *-ns*.snupkg
+foreach($file in $files)
+{
+ dotnet nuget push $file.fullName --skip-duplicate --api-key $apikey --source https://api.nuget.org/v3/index.json
+}
\ No newline at end of file