diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 594fbad3..26522f10 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -733,6 +733,15 @@
+
+
+ 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类
+
+
+
+
+
+
创建普通数据上下文档对象
@@ -791,5 +800,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Xugu/UnitDbFirst.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Xugu/UnitDbFirst.cs
index 24995607..188add87 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Xugu/UnitDbFirst.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Xugu/UnitDbFirst.cs
@@ -22,16 +22,20 @@ namespace FreeSql.Tests.Provider.Xugu
public void GetTableByName()
{
var fsql = g.xugu;
- var t1 = fsql.DbFirst.GetTableByName("GENERAL.system_log");
- Assert.NotNull(t1);
- Assert.True(t1.Columns.Count > 0);
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ var t1 = fsql.DbFirst.GetTableByName("test_existstb01");
+ Assert.NotNull(t1);
+ Assert.True(t1.Columns.Count > 0);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
}
[Fact]
public void ExistsTable()
{
var fsql = g.xugu;
- Assert.False(fsql.DbFirst.ExistsTable("GENERAL.system_log"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
diff --git a/FreeSql.sln b/FreeSql.sln
index 1e6e6788..e20ed226 100644
--- a/FreeSql.sln
+++ b/FreeSql.sln
@@ -123,6 +123,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Extensions.Aggregat
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Provider.Xugu", "Providers\FreeSql.Provider.Xugu\FreeSql.Provider.Xugu.csproj", "{8064870C-22EA-4A58-972D-DBD57D096D91}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FreeSql.Tests.Provider.Xugu", "FreeSql.Tests\FreeSql.Tests.Provider.Xugu\FreeSql.Tests.Provider.Xugu.csproj", "{16C21D77-20AC-4722-AD97-F53BDDE8210C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -733,6 +735,18 @@ Global
{8064870C-22EA-4A58-972D-DBD57D096D91}.Release|x64.Build.0 = Release|Any CPU
{8064870C-22EA-4A58-972D-DBD57D096D91}.Release|x86.ActiveCfg = Release|Any CPU
{8064870C-22EA-4A58-972D-DBD57D096D91}.Release|x86.Build.0 = Release|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Debug|x64.Build.0 = Debug|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Debug|x86.Build.0 = Debug|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Release|x64.ActiveCfg = Release|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Release|x64.Build.0 = Release|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Release|x86.ActiveCfg = Release|Any CPU
+ {16C21D77-20AC-4722-AD97-F53BDDE8210C}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -775,8 +789,8 @@ Global
{8064870C-22EA-4A58-972D-DBD57D096D91} = {2A381C57-2697-427B-9F10-55DA11FD02E4}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
- RESX_PrefixTranslations = True
RESX_NeutralResourcesLanguage = en-US
+ RESX_PrefixTranslations = True
+ SolutionGuid = {089687FD-5D25-40AB-BA8A-A10D1E137F98}
EndGlobalSection
EndGlobal
diff --git a/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs b/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs
index b040d8fd..b58e90e7 100644
--- a/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs
+++ b/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs
@@ -442,14 +442,15 @@ where IS_SYS=false and {loc8.ToString().Replace("a.table_name", "ns.SCHEMA_NAME
{
sql = $@"
select
-schema_name || '.' || b.table_name as table_id,
-cons_name as FKId,
-cons_type,
-define
+c.schema_name || '.' || b.table_name as table_id,
+a.cons_name as FKId,
+a.cons_type,
+a.define,
+(select c2.schema_name || '.' || b2.table_name from all_tables as b2 left join all_SCHEMAS as c2 on b2.SCHEMA_ID=c2.SCHEMA_ID where b2.TABLE_id=b.table_id) as ref_table_id
from all_constraints as a
left join all_tables as b on a.Table_ID=b.Table_ID
left Join all_SCHEMAS AS c on b.SCHEMA_ID=c.SCHEMA_ID
-where IS_SYS=false AND {loc8.ToString().Replace("a.table_name", "schema_name || '.' || b.table_name")}
+where IS_SYS=false AND a.cons_type='F' AND {loc8.ToString().Replace("a.table_name", "schema_name || '.' || b.table_name")}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -458,15 +459,31 @@ where IS_SYS=false AND {loc8.ToString().Replace("a.table_name", "schema_name ||
foreach (object[] row in ds)
{
var table_id = string.Concat(row[0]);
- var column = row[3] as string[];
+ var ref_table_id = string.Concat(row[4]);
+ //var ref_table_id = row[4] as long?;
+ //if (!ref_table_id.HasValue || ref_table_id < 1)
+ // continue;
+
+ //loc2 是所有表信息
+
+ if (!string.IsNullOrWhiteSpace(ref_table_id) || loc2.ContainsKey(ref_table_id?.ToString()) == false) continue;
+
+
+ var column_temps = (row[3] as string)
+ .Replace(")(", "|")
+ .Replace("\"","")
+ .Replace("(", "")
+ .Replace(")", "")
+ .Split('|');
+ var column = column_temps[0].Split(',');
var fk_id = string.Concat(row[1]);
- var ref_table_id = string.Concat(row[0]);
- var is_foreign_key = string.Concat(row[2]) == "F";
- var referenced_column = row[5] as string[];
+
+ //var is_foreign_key = string.Concat(row[2]) == "F";
+ var referenced_column = column_temps[1].Split(',');
//var referenced_db = string.Concat(row[6]);
//var referenced_table = string.Concat(row[7]);
- if (loc2.ContainsKey(ref_table_id) == false) continue;
+
Dictionary loc12 = null;
DbForeignInfo loc13 = null;