"不支持指定的方法"在实体框架 [英] "Specified method is not supported" in Entity Framework
问题描述
这是我的实体类:
公共部分类NerdDinnerEntities:ObjectContext的
{
公共NerdDinnerEntities(字符串的connectionString)
:基地(的connectionString,NerdDinnerEntities)
{
尝试
{
ObjectContext的OC =新的ObjectContext(的connectionString);
oc.Connection.ChangeDatabase(NERDDINNER1);
oc.AcceptAllChanges();
this.ContextOptions.LazyLoadingEnabled = TRUE;
OnContextCreated();
}
赶上(例外前){}
}
部分无效OnContextCreated();
///<总结>
///没有元数据文档。
///< /总结>
公共对象集<晚餐>晚餐
{
得到
{
如果((_Dinners == NULL))
{
_Dinners = base.CreateObjectSet<晚餐>(晚餐);
}
返回_Dinners;
}
}
私人对象集<晚餐> _Dinners;
///<总结>
///没有元数据文档。
///< /总结>
公共对象集< RSVP>回函
{
得到
{
如果((_RSVPs == NULL))
{
_RSVPs = base.CreateObjectSet&其中; RSVP&GT(回函);
}
返回_RSVPs;
}
}
私人对象集< RSVP> _RSVPs;
///<总结>
///没有元数据文档。
///< /总结>
公共对象集< sysdiagram> sysdiagrams
{
得到
{
如果((_sysdiagrams == NULL))
{
_sysdiagrams = base.CreateObjectSet&其中; sysdiagram&GT(sysdiagrams);
}
返回_sysdiagrams;
}
}
私人对象集< sysdiagram> _sysdiagrams;
///<总结>
///德precated方法用于添加新对象到晚餐EntitySet的。考虑使用相关的对象集和放大器的。新增的方法;其中,T&放大器; GT;属性。
///< /总结>
公共无效AddToDinners(晚餐晚餐)
{
base.AddObject(晚宴,晚宴);
}
///<总结>
///德precated方法用于添加新对象到回函EntitySet的。考虑使用相关的对象集和放大器的。新增的方法;其中,T&放大器; GT;属性。
///< /总结>
公共无效AddToRSVPs(RSVP RSVP)
{
base.AddObject(回函,RSVP);
}
///<总结>
///德precated方法用于添加新对象到sysdiagrams EntitySet的。考虑使用相关的对象集和放大器的。新增的方法;其中,T&放大器; GT;属性。
///< /总结>
公共无效AddTosysdiagrams(sysdiagram sysdiagram)
{
base.AddObject(sysdiagrams,sysdiagram);
}
}
而这些是我的web.config文件
<添加名称=NerdDinnerEntities connectionString="metadata=res://*/Models.NerdDinner.csdl|res://*/Models.NerdDinner.ssdl|res://*/Models.NerdDinner.msl;provider=System.Data.SqlClient;provider连接字符串=安培; QUOT;数据源= @;数据库=的NerdDinner;用户ID = @;密码= ###; MultipleActiveResultSets =真放; QUOT;的providerName =System.Data.EntityClients/>
和我收到的错误:
不支持指定的方法
在这一行:
oc.Connection.ChangeDatabase(NERDDINNER1);
如果您查找文档的<一个href="http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.changedatabase.aspx"相对=nofollow> MSDN 你会看到,该方法不支持从字面上。它必须是一个占位符,为今后的改进什么的。
要扩大对于那些谁想要在运行时更改数据库:
在你设置1,创建一个条目就地默认在App.config中使用。拉出细节,如用户名,密码,目录名(数据库名),服务器等为其他设置项。
&lt;设定名称=EntityConnectionString2TYPE =System.String范围=应用程序&GT;
&LT;价值Profile="(Default)">metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider连接字符串=数据源= {0};初始目录= {1};坚持安全信息= TRUE;用户id={2};password={3};encrypt=True;trustservercertificate=True;multipleactiveresultsets=True;App=EntityFramework"</Value>
&LT; /设置&GT;
请注意{0} .. {3}项和放大器;这个连接字符串不整的配置/的ConnectionStrings /添加的条目在app.config 的
2.使用重载的构造函数,它接受一个连接字符串的EF数据库之一。
VAR设置= Properties.Settings.Default;
字符串constring =的String.Format(settings.EntityConnectionString2,settings.Server,settings.Database,settings.User,settings.Password);
NerdDinnerEntities DB =新NerdDinnerEntities(constring);
3.To运行时的变化,你可以用不同的目录名称创建相同的方式不同的对象,或处理并重新创建具有不同的目录名的数据库对象。
This is my entity class:
public partial class NerdDinnerEntities : ObjectContext
{
public NerdDinnerEntities(string connectionString)
: base(connectionString, "NerdDinnerEntities")
{
try
{
ObjectContext oc = new ObjectContext(connectionString);
oc.Connection.ChangeDatabase("NERDDINNER1");
oc.AcceptAllChanges();
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
catch (Exception ex) { }
}
partial void OnContextCreated();
/// <summary>
/// No Metadata Documentation available.
/// </summary>
public ObjectSet<Dinner> Dinners
{
get
{
if ((_Dinners == null))
{
_Dinners = base.CreateObjectSet<Dinner>("Dinners");
}
return _Dinners;
}
}
private ObjectSet<Dinner> _Dinners;
/// <summary>
/// No Metadata Documentation available.
/// </summary>
public ObjectSet<RSVP> RSVPs
{
get
{
if ((_RSVPs == null))
{
_RSVPs = base.CreateObjectSet<RSVP>("RSVPs");
}
return _RSVPs;
}
}
private ObjectSet<RSVP> _RSVPs;
/// <summary>
/// No Metadata Documentation available.
/// </summary>
public ObjectSet<sysdiagram> sysdiagrams
{
get
{
if ((_sysdiagrams == null))
{
_sysdiagrams = base.CreateObjectSet<sysdiagram>("sysdiagrams");
}
return _sysdiagrams;
}
}
private ObjectSet<sysdiagram> _sysdiagrams;
/// <summary>
/// Deprecated Method for adding a new object to the Dinners EntitySet. Consider using the .Add method of the associated ObjectSet<T> property instead.
/// </summary>
public void AddToDinners(Dinner dinner)
{
base.AddObject("Dinners", dinner);
}
/// <summary>
/// Deprecated Method for adding a new object to the RSVPs EntitySet. Consider using the .Add method of the associated ObjectSet<T> property instead.
/// </summary>
public void AddToRSVPs(RSVP rSVP)
{
base.AddObject("RSVPs", rSVP);
}
/// <summary>
/// Deprecated Method for adding a new object to the sysdiagrams EntitySet. Consider using the .Add method of the associated ObjectSet<T> property instead.
/// </summary>
public void AddTosysdiagrams(sysdiagram sysdiagram)
{
base.AddObject("sysdiagrams", sysdiagram);
}
}
and these is my web.config file as
<add name="NerdDinnerEntities" connectionString="metadata=res://*/Models.NerdDinner.csdl|res://*/Models.NerdDinner.ssdl|res://*/Models.NerdDinner.msl;provider=System.Data.SqlClient;provider connection string="Data Source=@;Database=NERDDINNER;User ID=@;Password=@@@;MultipleActiveResultSets=True"" providerName="System.Data.EntityClients" />
and i am getting error:
Specified method is not supported
in this line:
oc.Connection.ChangeDatabase("NERDDINNER1");
If you look up the docs at MSDN you will see that the method literally is not supported. It must be a placeholder for future improvements or something.
To expand for those who do want to change the database at runtime:
1.Create an entry in your settings to use in-place of the default in the app.config. Pull out the specifics, like Username, password, catalog name (database name), server etc into other settings entries.
<Setting Name="EntityConnectionString2" Type="System.String" Scope="Application">
<Value Profile="(Default)">metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source={0};initial catalog={1};persist security info=True;user id={2};password={3};encrypt=True;trustservercertificate=True;multipleactiveresultsets=True;App=EntityFramework"</Value>
</Setting>
Please note the {0}..{3} entries & that this connection string is not the whole configuration/connectionStrings/add entry in the app.config
2.Use one of the overloaded constructors for the EF Database that accepts a connection string.
var settings = Properties.Settings.Default;
string constring = string.Format(settings.EntityConnectionString2, settings.Server, settings.Database, settings.User, settings.Password);
NerdDinnerEntities db = new NerdDinnerEntities (constring);
3.To change at runtime you can create a different object in the same manner with a different catalog name, or dispose and recreate the db object with a different catalog name.
这篇关于&QUOT;不支持指定的方法&QUOT;在实体框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!