c# ef ToTable(tablename,schame),动态加载时schame无效

Morcom.G 2021-03-17 11:57:22
在做一个asp.net core的项目,因为用插件化开发。
然后,动态映射到表里。
如果所有表在同一个数据库his里,那么这段代码没问题。
但是我想把部分表(assets)分离出来。然后添加了schame参数,但是发现不起作用,他还是映射为his.xxxx。
之前我弄一个项目的时候,不是用动态加载的方法,但是可以的。很奇怪不知道为什么。请大神指教一下。
之前
↓这是动态的代码。现在的项目

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var modelAssemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a=>a.FullName.Contains("HIS.Models"));

if (modelAssemblies.Count() > 0)
{
foreach(var modelAssembly in modelAssemblies)
{
try
{
var models = modelAssembly.GetTypes();
foreach (var model in models)
{
var attr = model.GetCustomAttributes(typeof(SchemaAttribute), true);
if (attr?.Length>0)
{
var schemaattr = attr.First() as SchemaAttribute;
var schema = schemaattr.Name.ToLower();// assets
modelBuilder.Entity(model).ToTable(model.Name, schema);
Console.WriteLine($"loaded schema:{schema},table:{model.Name}");
}
else
{
modelBuilder.Entity(model).ToTable(model.Name);
Console.WriteLine($"loaded schema:default,table:{model.Name}");
}
}
}
catch(Exception err)
{
Console.WriteLine(err.Message);
}
}
}

//base.OnModelCreating(modelBuilder);
}

↓这是之前的项目的代码,可以映射成功。

//PersonnelSchema是一个静态字符串
modelBuilder.Entity<Education>().ToTable(nameof(Education), PersonnelSchema);
...全文
437 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Morcom.G 2021-05-02
  • 打赏
  • 举报
回复
结帖了。5.0版本问题。
Hello World, 2021-03-19
  • 打赏
  • 举报
回复
打断点进去调试,看看怎么调用的,例如if(attr?.Length>0)是走的哪个分支?

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧