如何解决警告:元素'entityFramework'具有无效的子元素'providers'。预期可能元素列表:'contexts'

时间:2013-10-22 18:47:44

标签: entity-framework visual-studio-2012 ef-code-first entity-framework-6

我正在玩EF不同的工作流程。昨天我做了一个新项目Entity Framework 6Nuget的第一个建议所以我决定尝试一下,这也是一个非常小的项目完全用于学习目的所以我想这将是一个很好的经验尝试EF 6,因为我一直主要使用Ef 5

我的应用程序基于Code First方法。解决方案的结构显示在打印屏幕中:

Solution Tree

项目CodeFirstClasses旨在容纳我的Entites。为简单起见,因为我遵循教程,我只使用了一个课程 - Customer.cs。我有:

public class RewardContext : DbContext
    { 
        //Specify the name of the base as Rewards
        public RewardContext() : base("Rewards")
        { 
        }

        //Create a database set for each data item
        public DbSet<Purchase> Purchases { get; set; }
        public DbSet<Customer> Customers { get; set; }

    }

其他类 - PurchaseCustomer这些都是微不足道的,所以我不会在这里粘贴它们。

您可以看到的另一个项目是Windows Forms项目,其上只有一个表单和按钮。在按钮的click事件中,我拥有将新记录添加到硬编码的两个实体的所有逻辑。这只是其中的一部分:

    //some code...
    //Add the record and save it
    context.Customers.Add(newCustomer);
    context.Purchases.Add(newPurchase);
    context.SaveChanges();

    MessageBox.Show("Record Added!");

到目前为止,我与EF 5的习惯没什么不同。我可以构建项目,我可以运行它,一切都按预期执行。但是我从标题中得到了这个警告:

Warning 1 The element 'entityFramework' has invalid child element 'providers'. List of possible elements expected: 'contexts'.即使我主要使用MS SQL Server Management Studio,我也注意到我无法通过IDE管理我的连接/数据库 - Visual Studio 2012,但这是不是EF 5的问题。

我的研究缩小了手动更改App.config文件的问题/解决方案的可能来源,但这是一个我没有太多经验的领域,特别是当IDE处理它直到{{1 }}。所以我会发布我的EF 6文件来解决这个问题:

来自App.config项目的那个:

CodeFirstClasses

来自我的<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration> 项目:

TestCodeFirst

我发现的另一个可能的解决方案是:<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration> ,我也不知道究竟是怎么做的。

即使当我打开updating the xsd for "validating" EF config section in web/app.config file to recognize newly added EF6 elements时,我看到为此应用程序创建的数据库,记录也会保存,通常它似乎可以正常工作,但我想解决此警告并了解如何设置我的申请基于MS SQL Server Management Studio权利。

2 个答案:

答案 0 :(得分:32)

您可以从here安装适用于VS2012的EF6 Designer,它将更新验证配置文件的架构。

答案 1 :(得分:6)

配置架构已从版本5更改为6.如上所述,provider节点已替换为contexts节点。

我们的想法是您可以使用相同的提供程序单独配置提供程序而不是所有上下文。 (这与能够拥有多个驻留在一个数据库中的上下文同步。这曾经被称为多租户,但后来被重命名为更简洁)