0

我有针对 MyDatabase 运行的 website1 和 webiste2。

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

我希望 website1 和 website2 运行相同的代码库,是否可以让网站一个从 dbo1.Posts 获得它的帖子,而 website2 从 dbo2.Posts 获得他们的帖子?

想法是所需的架构(dbo1 或 dbo2)将来自配置文件。

在我的情况下,dbo1.Posts 和 dbo2.Posts 中的信息可能被视为机密信息。可能有用户可以访问两者,或者可能有用户可以访问其中一个。因此,正如我所见,有两种方法,物理上或逻辑上分离数据库。我手头的任务是调查它是否可以在逻辑上完成

4

5 回答 5

1

六步:

  1. 使用类型库导入器为您的 ActiveX EXE 生成互操作程序集。
  2. 在 C# 项目中添加对互操作程序集的引用。
  3. 使用 Process.Start 启动 ActiveX EXE。
  4. 使用 Marshal.GetActiveObject 在运行的 ActiveX EXE 中获取对象的运行实例(相当于 VB 中的 GetObject)。
  5. 将上一步中返回的对象转换为互操作程序集中定义的等效类型。
  6. 对对象做任何需要做的事情。
于 2012-04-24T05:21:01.867 回答
1

此链接说明如何使用代码优先映射为类指定架构。如果您不能重构您的应用程序以不在两个不同的模式中使用相同的类/表,恐怕您将不得不定义两个 Post 类:映射到 dbo1 的 Post1 和映射到 dbo2 的 Post2。此外,在尝试为用户获取帖子时,您会遇到阻碍,您必须拥有 User.Post1s 和 User.Post2s(粗略的示例,抱歉)。

因此,除非您别无选择,否则我将对其进行重构以解决重复的表。

于 2012-04-24T04:36:27.340 回答
0

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

有关更详细的说明,请参见此处:https ://stackoverflow.com/a/14782001/243607

于 2013-02-08T22:07:40.283 回答
0

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

话虽如此,我仍然同意Matt 和 Hacked 的观点,认为应该有一种更简单的方法来做到这一点。

我的拼图有三个不同的图片。

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

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 的帖子。

于 2012-04-29T04:29:15.667 回答
0

老实说,我会重新评估您的设计,并在 Post 表中添加一列来指示来源。更简单,更清洁。

于 2012-04-24T04:30:07.530 回答