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

时间:2014-11-28 19:53:33

标签: c# asp.net entity-framework dbcontext

我试图将localdb与asp mvc一起使用 我从我的visual studio 2013安装了EF 6.0(带有nuget)

首先在我的项目中添加一个" ADO.NET实体数据模型" :

using OCR_Restaurant.Models;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace OCR_Restaurant
{
    using System;
    using System.Data.Entity;
    using System.Linq;

    public class BddContext : DbContext
    {
        public BddContext()
            : base("name=BddContext")
        {
        }
        public DbSet<Sondage> Sondages { get; set; }
        public DbSet<Resto> Restos { get; set; }
}

然后是我的界面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OCR_Restaurant.Models
{
    interface IDal: IDisposable
    {
        void CreerRestaurant(string nom, string telephone);
        List<Resto> ObtientTousLesRestaurants();
    }
}

我的达尔:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace OCR_Restaurant.Models
{
    public class Dal:IDal
    {
        private BddContext bdd;

        public Dal()
        {
            bdd = new BddContext();
        }

        public List<Resto> ObtientTousLesRestaurants()
        {
            return bdd.Restos.ToList();
        }

        public void Dispose()
        {
            bdd.Dispose();
        }

        public void CreerRestaurant(string nom, string telephone)
        {
            Resto resto = new Resto { Id = 1, Nom = nom, Telephone = telephone };
            bdd.Restos.Add(resto);
        }
    }
}

在我的Web.config中:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="BddContext" connectionString="data source=(LocalDb)\v11.0;initial catalog=OCR_Restaurant.BddContext;integrated security=TRUE;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>

这是我的测试类:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Data.Entity;
using OCR_Restaurant.Models;
using System.Collections.Generic;
using System.Linq;

namespace OCR_Restaurant.Tests
{
    [TestClass]
    public class DalTests
    {
        [TestMethod]
        public void CreerRestaurant_AvecUnNouveauRestaurant_ObtientTousLesRestaurantsRenvoitBienLeRestaurant()
        {
            using (Dal dal = new Dal())
            {
                dal.CreerRestaurant("La bonne fourchette", "01 02 03 04 05");
                List<Resto> restos = dal.ObtientTousLesRestaurants();

                Assert.IsNotNull(restos);
                Assert.AreEqual(1, restos.Count);
                Assert.AreEqual("La bonne fourchette", restos[0].Nom);
                Assert.AreEqual("01 02 03 04 05", restos[0].Telephone);
            }
        }
    }
}

当我运行&#34;测试&#34;时,我收到以下消息: &#34;没有名为&#39; BddContext&#39;的连接字符串可以在应用程序配置文件&#34;

中找到

我认为一切都很好,但也许是错的? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

测试是运行代码的测试。当它寻找一个连接字符串时,它会查找它自己的项目,而不是你的MVC项目。

快速简便的解决方案是将连接字符串添加到测试项目的app.config文件中。

答案 1 :(得分:0)

我假设您有一个单独的测试项目,其中包含您的测试类(DalTests)。如果您确保测试项目的app.config具有相同的BddContext连接字符串条目,则不应发生错误,因为测试项目在其自己的配置文件中查找,而不是在mvc项目或任何其他库中查找。< / p>

答案 2 :(得分:0)

根据您的指示,我找到了解决方案:

  • 右侧clic testproject并添加名为“application config file”的项目
  • 在testprject中:我也必须安装实体框架

然后visual studio生成一个很好的app.config。 在此文件中添加连接字符串。