C# 实体框架:如何处理dbo.tablename与obd.tablename的区别

C# 实体框架:如何处理dbo.tablename与obd.tablename的区别,c#,entity-framework,C#,Entity Framework,我有针对MyDatabase运行的website1和webiste2 在MyDatabase中,我有一些表:dbo.Users、dbo1.Posts、dbo2.Posts。dbo.Users和dbo1.Posts以及dbo.Users和dbo2.Posts之间存在外键关系 我希望website1和website2运行相同的代码库,是否可以让website1从dbo1.Posts获取其帖子,而website2从dbo2.Posts获取其帖子 其思想是,所需的模式(dbo1或dbo2)将来自配置文件

我有针对MyDatabase运行的website1和webiste2

在MyDatabase中,我有一些表:dbo.Users、dbo1.Posts、dbo2.Posts。dbo.Users和dbo1.Posts以及dbo.Users和dbo2.Posts之间存在外键关系

我希望website1和website2运行相同的代码库,是否可以让website1从dbo1.Posts获取其帖子,而website2从dbo2.Posts获取其帖子

其思想是,所需的模式(dbo1或dbo2)将来自配置文件


在我的情况下,dbo1.Posts和dbo2.Posts中的信息可以被视为机密信息。可能有用户可以同时访问这两个站点,也可能有用户可以访问其中一个站点。在我看来,有两种方法,物理上或逻辑上分离数据库。我手头的任务是调查它是否可以逻辑地完成。老实说,我会重新评估您的设计,只需在Post表中添加一列来指示源代码。更简单更干净。

。如果您无法重构应用程序,使其在两个不同的模式中不使用相同的类/表,那么恐怕您必须定义两个Post类:映射到dbo1的Post1和映射到dbo2的Post2。此外,在尝试为用户获取帖子时,您将遇到阻抗,其中必须有User.Post1s和User.Post2s(粗略的示例,对不起)

因此,除非您别无选择,否则我将重构此文件以处理重复的表。

六步:

  • 使用类型库导入器为ActiveX EXE生成互操作程序集
  • 在C#项目中添加对互操作程序集的引用
  • 使用Process.Start启动ActiveX EXE
  • 使用Marshal.GetActiveObject在运行的ActiveX EXE中获取对象的运行实例(等于VB中的GetObject)
  • 将上一步中返回的对象强制转换为互操作程序集中定义的等效类型
  • 对物体做任何需要做的事情

  • 好吧,这就是最终发生的事情。仍然不确定这是否是最好的解决方案,但如果有人来寻找这个问题的答案,我确实找到了一种方法使它起作用

    尽管如此,我仍然同意马特的观点,并认为应该有一种更简单的方法来实现这一点

    我的puzzel有三种不同的图片

    首先,有一个实体到表的映射,我使用了以下内容:

    this.ToTable("Posts", ConfigurationHelper.GetSiteSchema());
    
    第二,我在一个配置助手中有一行代码,它从Web.config文件中的AppSettings读取

        public static string GetSiteSchema()
        {
            return ConfigurationManager.AppSettings["SiteSchema"];
        }
    
    第三,在web.config文件中,我添加了一个Appsettings,如下所示:

     <appSettings>
        <add key="ClientValidationEnabled" value="true" />
        <add key="UnobtrusiveJavaScriptEnabled" value="true" />
        <add key="SiteSchema" value="dbo1"/>
      </appSettings> 
    
    
    

    在构建应用程序并运行它之后,我从dbo1.posts获得了帖子。然后,我可以将web.config文件中的字符串切换为“dbo2”,刷新页面并查看dbo2.posts中的帖子。

    如果您想在创建上下文时动态设置架构名称,这里有一个替代解决方案。。。基本上与@BradleyH的答案类似,但不是从配置类中读取,而是将模式名称作为映射方法/构造函数的参数


    请参阅此处以获得更详细的解释:

    Ah,我不知道您只需要在配置时更改模式。我认为您需要能够在运行时同时访问dbo1.Posts和dbo2.Posts。