2017-06-10 29 views
0

我用這個代碼來更改連接字符串獲取當前MetadataPath C#變化的連接字符串

var connstring = ConfigurationManager 
       .ConnectionStrings["BAEntities"].ConnectionString; 
var estringnew = new EntityConnectionStringBuilder(connstring); 
estringnew.Metadata = Properties.Settings.Default.MetadataFilePath; 
var context = new BAEntities(estringnew.ToString()); 
var query = 
    from con in context.Contacts 
    where con.Addresses.Any((a) => a.City == "Seattle") 
    select con; 

source

我有錯誤行:

estringnew.Metadata = Properties.Settings.Default.MetadataFilePath; 

嚴重性代碼說明項目文件線路抑制狀態 錯誤CS1061'設置'不包含的定義「MetadataPath」和沒有擴展方法「MetadataPath」接受類型「設置」的 第一個參數可以發現(使用指令或程序集 參考是否缺少 ?)

如何找到的項目中當前MetadataFilePath

我使用實體框架6和.NET 4.5

+0

是這段代碼的第一或數據庫第一? – CodingYoshi

+0

@CodingYoshi數據庫優先 –

回答

1

想象一下你的模型被命名爲Abc然後設置Metadata這樣的:

estringnew.Metadata = "res://*/Abc.csdl|res://*/Abc.ssdl|res://*/Abc.msl" 

在上面,你會看到使用通配符*。這裏是一個意思:

如果指定assemblyFullName一個通配符(*),實體框架運行時將搜索的資源在以下位置,順序如下:

  1. 的調用程序集。
  2. 引用的程序集。
  3. 應用程序的bin目錄中的程序集。

一個更好的選擇

string con = ConfigurationManager.ConnectionStrings["BAEntities"].ConnectionString; 
Type contextType = typeof(BAEntities); 
string efConnection = 
    string.Format(
     "metadata=res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl;provider=System.Data.SqlClient;provider connection string=\"{1}\"", 
     contextType.Name, 
     con); 

object objContext = Activator.CreateInstance(contextType, efConnection); 
return objContext as Entities; 

更多信息here