【问题标题】:"Specified method is not supported" in Entity Framework实体框架中的“不支持指定的方法”
【发布时间】:2012-07-31 06:51:04
【问题描述】:

这是我的实体类:

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);
    }
}

这些是我的 web.config 文件

<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" />

我收到错误:

不支持指定的方法

在这一行:

oc.Connection.ChangeDatabase("NERDDINNER1");

【问题讨论】:

  • 你的构造函数中的代码看起来很奇怪。

标签: c# .net entity-framework entity-framework-4 exception-handling


【解决方案1】:

如果您查看MSDN 的文档,您会发现该方法实际上不受支持。它必须是未来改进或其他东西的占位符。

为那些确实想在运行时更改数据库的人扩展:

1.在您的设置中创建一个条目以代替 app.config 中的默认设置。将用户名、密码、目录名称(数据库名称)、服务器等详细信息提取到其他设置条目中。

<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>

请注意 {0}..{3} 条目,并且此连接字符串不是 app.config 中的整个 configuration/connectionStrings/add 条目

2. 为 EF 数据库使用一个接受连接字符串的重载构造函数。

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.要在运行时更改,您可以使用不同的目录名称以相同的方式创建不同的对象,或者使用不同的目录名称处理并重新创建 db 对象。

【讨论】:

  • 当前数据库打开时不能更改它吗?
  • 我有一个面团,在哪里添加设置标签
  • 您可以通过两种方式添加设置,我已经展示了在 app.config 中创建的 XML,但添加它的最佳方式是在项目属性 -> 设置
  • 我可以在调用NerdDinnerEntities实例的地方添加它
  • @GowthamanSS 请重读 3 点。不幸的是,StackOverflow 不能像论坛一样使用。目标是创建一个可自定义的连接字符串,以便您可以在必要时使用不同的数据库。在您在 paste.org 的文件中,您使用的是 ConfigurationManager。通过以下第 2 点访问设置。您不能在 EF 构造函数中使用配置中的连接字符串。比较点 1 连接字符串和您正在加载的配置中的连接字符串。
【解决方案2】:

不支持EntityConnection的ChangeDatabase方法(http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.changedatabase.aspx)

如果您想将数据上下文用于另一个数据库,请创建另一个连接字符串并使用新连接字符串创建数据上下文实例

【讨论】:

  • 如何使用数据上下文实例创建另一个连接字符串...你可以通过发送一些链接来指导我
  • web.config 中的连接字符串重复,更改其名称并将 Database=NERDDINNER 更改为其值中的其他内容
  • 表示需要添加新的配置字符串为
  • 更改连接字符串的名称(名称属性)以避免名称重复
  • ya k 将属性名称从 NerdDinnerEntities 更改为 NerdDinnerEntities1 den 我如何在编码中选择特定数据库
猜你喜欢
  • 2013-05-29
  • 2023-03-08
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多