在应用程序配置文件中找不到名为''的连接字符串

时间:2015-03-18 08:17:32

标签: c# wpf entity-framework-6

我知道之前已经多次询问过这个问题 - 答案基本相同。但在这些情况下,当更多项目使用相同的实体并且连接字符串不存在于所有配置文件中时,问题通常会发生。 在我的情况下,所有都在同一个项目中。连接字符串存在于App.config中。 我在XAML中使用了一个viewmodel:

<Window x:Class="ReportMapping.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:ReportMapping"
        Title="Title" Height="477.22" Width="836.631">
    <Window.DataContext>
        <local:CompanyCollectionViewModel/>

    </Window.DataContext>...

我从我的ViewModel调用我的实体:

namespace ReportMapping
{
    class CompanyCollectionViewModel 
    {
        NAV_HelpersEntities dbContext = new NAV_HelpersEntities();

如果我在其他地方调用实体,那么我的viewmodel就可以了。在代码背后的示例绑定中。

connectionstring(如果在MainWindow.cs中使用,则可以正常工作):

<connectionStrings>
    <add name="NAV_HelpersEntities" connectionString="metadata=res://*/Mapping.csdl|res://*/Mapping.ssdl|res://*/Mapping.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=NAV\;initial catalog=NAV_Helpers;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

这里是NAV_HelpersEntities构造函数:

public partial class NAV_HelpersEntities : DbContext
    {
        public NAV_HelpersEntities()
            : base("name=NAV_HelpersEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<R_Component> R_Component { get; set; }
        public virtual DbSet<R_Configuration> R_Configuration { get; set; }
        public virtual DbSet<R_Masterdata> R_Masterdata { get; set; }
        public virtual DbSet<R_Type> R_Type { get; set; }
        public virtual DbSet<View_NAV_Entries> View_NAV_Entries { get; set; }
        public virtual DbSet<View_R_GetAccounts> View_R_GetAccounts { get; set; }
    }

当我调试CompanyCollectionViewModel构造函数时,我可以看到正在填充我的ObservableCollection。

我在这里做错了什么?

更新: 好吧,我现在通过将connectionstring添加到machine.config来实现它。这是有效的 - 但我想这只是一个解决方法,我将不得不解决。感谢您提供意见。

2 个答案:

答案 0 :(得分:5)

我找到了一个简单的解决方案。调用实体构造函数的基础构造函数时,必须从参数字符串中删除“name =”。 所以你必须改变这个:

public partial class SalesContext : DbContext 
{ 
    public SalesContext() 
        : base("name=SalesContext") 
    { 
    }

到此:

public partial  class SalesContext : DbContext 
{ 
    public SalesContext() 
        : base("SalesContext") 
    { 
    }

在此处查看:Entity Framework MVVM Walk Through 1

答案 1 :(得分:0)

改变这个:

base("name=NAV_HelpersEntities")

到此:

base(nameOrConnectionString: "NAV_HelpersEntities")