获取当前的MetadataPath C#更改连接字符串

时间:2017-06-10 06:16:23

标签: c# entity-framework-6

我使用此代码更改连接字符串

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

我使用Entity framework 6和.net 4.5

1 个答案:

答案 0 :(得分:1)

想象一下,您的模型名为Abc,然后像这样设置Metadata

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

在上面,您将看到使用的通配符*。这是意思:

  

如果为assemblyFullName指定通配符(*),则Entity Framework运行时将按以下顺序搜索以下位置中的资源:

  1. 调用程序集。
  2. 引用的程序集。
  3. 应用程序的bin目录中的程序集。
  4. 更好的选择

    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