"不支持指定的方法"在实体框架 [英] "Specified method is not supported" in Entity Framework

查看:145
本文介绍了"不支持指定的方法"在实体框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的实体类:

 公共部分类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&lt;T&gt; 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&lt;T&gt; 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&lt;T&gt; 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=&quot;Data Source=@;Database=NERDDINNER;User ID=@;Password=@@@;MultipleActiveResultSets=True&quot;" 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆