我使用此代码更改连接字符串
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;
我有错误:
estringnew.Metadata = Properties.Settings.Default.MetadataFilePath;
严重级代码描述项目文件行抑制状态 错误CS1061'设置'不包含的定义 ' MetadataPath'没有扩展方法' MetadataPath'接受一个 类型'设置'的第一个参数可以找到(你错过了吗? 使用指令或程序集 引用?)
如何在项目中找到当前的MetadataFilePath
?
我使用Entity framework 6和.net 4.5
答案 0 :(得分:1)
想象一下,您的模型名为Abc
,然后像这样设置Metadata
:
estringnew.Metadata = "res://*/Abc.csdl|res://*/Abc.ssdl|res://*/Abc.msl"
在上面,您将看到使用的通配符*
。这是意思:
如果为assemblyFullName指定通配符(*),则Entity Framework运行时将按以下顺序搜索以下位置中的资源:
更好的选择
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