簡體   English   中英

Silverlight實體框架動態連接字符串

[英]Silverlight Entity Framework Dynamic Connection String

我在一堆不同的服務器上有相同的數據模型。 我想根據用戶是誰以及他們在做什么動態創建連接字符串。

我的用戶可以在多個服務器上擁有多個數據庫。 創建DomainService時,我需要一種干凈的方法來構建連接字符串。

我看到DomainService有一個重寫(繼承自LinqToEntitiesDomainService),稱為CreateObjectContext(),它將允許我設置所需的任何連接字符串,然后返回新實體,並且生活很美好。 問題是,CreateObjectContext()在構造函數之后被調用,所以我無法通過invoke方法設置字符串。 另外,我嘗試在DomainService上創建一個新的參數化構造函數,但從未將其復制到客戶端上的DomainContext中。

如果我能夠拉出我的連接字符串,CreateObjectContext()會很好用,但是由於我必須使用來自客戶端的數據來確定要連接的數據庫,所以這顯然行不通。

我考慮的越多,我就越覺得自定義構造函數正是我所需要的-只是不知道如何完成該工作。

我想念什么?

我找到了解決方案。 對於那些感興趣的人,這里是:

感覺有點像黑客,但這是我能想到的唯一解決方案。 感謝Sally Xu在forums.silverlight.net上獲得的想法。

由於我的每個用戶都可以在多個服務器上擁有多個數據庫,因此我需要在首次使用DomainService之前找到一種創建ConnectionString的方法。 每次用戶從UI中選擇一個新項目時,我都會設置如下cookie:

private void SetCookie(string cookieName, string cookieValue)
{
  DateTime expireDate = DateTime.Now + TimeSpan.FromDays(1); 
  string newCookie = cookieName + "=" + cookieValue + ";expires=" + expireDate.ToString("R");
  HtmlPage.Document.SetProperty("cookie", newCookie);
}

cookieName是SelectedProjectId ,而cookieValue是UI中當前選擇的項目。

然后,像往常一樣創建一個新的DomainService,但是我覆蓋了CreateObjectContext() 首次引用DomainService對象時,將調用此方法。 我的覆蓋看起來像這樣:

protected override ProjectEntities CreateObjectContext()
{
  long projectId = -1;
  StringBuilder connection;
  if (System.Web.HttpContext.Current.Request.Cookies["SelectedProjectId"] != null)
  {
    projectId = Convert.ToInt64(System.Web.HttpContext.Current.Request.Cookies["SelectedProjectId"].Value);
  }
  else throw new Exception("Selected Project ID Exception");  // temporary

  // Verify this user has access to the DB just in case it's spoofed 

  // Lookup project ID in my database to get the database name and server name

  // Load template connection string found in web.config
  // Replace the template holders for SERVER_NAME and DATABASE_NAME with above lookup values

  return new ProjectEntities(MyDynamicConnectionString);      
}

再說一次,這有點駭人聽聞,但這是我可以找到動態創建滿足我需求的連接字符串的唯一方法。 我希望這可以幫助其他人...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM