我有2个DB,构建和联系人,以及从Building DB,building_sp执行的存储过程。
building_sp需要更新联系人中的表TblContact,并且他们引用它的方式是
[Contact].dbo.[TblContact]
由于Contact表可以任意命名,我需要删除这个依赖项。
我可以使用 NOT 选项
任何关于此的建议或帮助都将受到赞赏,即使只是粗略的想法或部分答案。感谢。
答案 0 :(得分:1)
我会选择option1:有2个DataAccess组件,一个用于构建,一个用于Contact,让.NET组件(控制器)在事务中调用DAL上的操作(参见TransactionScope类)。
为什么?
答案 1 :(得分:0)
我最终将联系人DB名称存储在web.config应用程序设置
中<configuration>
…
<appSettings>
…
<add key="ContactDBName" value="ContactDataBase"/>
</appSettings>
…
</configuration>
然后我将其读入Application_Start()
的全局静态字符串public class WebApiApplication : System.Web.HttpApplication
{
public static string ContactDBName;
protected void Application_Start()
{
...
ReadContactDBNameFromConfig();
}
protected void ReadContactDBNameFromConfig()
{
System.Configuration.Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/WebServiceName");
System.Configuration.KeyValueConfigurationElement contactDBNameElement = rootWebConfig.AppSettings.Settings["ContactDBName"];
ContactDBName = contactDBNameElement.Value;
}
}
我还将存储过程存储到字符串中,使用“占位符”文字“{0}”作为数据库名称。
public static string BUILDING_SP =
@"BEGIN TRANSACTION
...
UPDATE [{0}].[dbo].[TblContact]
SET param1 = @Param1,
param2 = @Param2,
...
WHERE record_id = @RecordID
...
COMMIT";
然后我使用String.Format设置具有数据库名称
的占位符string sql = String.Format(BUILDING_SP, WebApiApplication.ContactDBName);
然后通过SqlCommand对象执行该字符串。