2017-04-13 123 views
1

我是ASP.NET MVC的初学者,并尝试使用Entity Framework Code-First访问数据库,但出现错误。我在stackoverflow上看到了很多问题,但它们与我的情况无关。我的错误是。C#:使用实体框架代码访问数据库 - 第一

“System.InvalidOperationException”类型的异常出现在EntityFramework.dll但在用户代码中没有处理

其他信息:无法完成操作。提供的SqlConnection不指定初始目录或AttachDBFileName。

在LensStoreController.cs

var brands = lensStoreDB.Brands.ToList();线

LensStoreController.cs

public ActionResult Index() 
{ 
    var brands = lensStoreDB.Brands.ToList(); 
    return View(brands); 
} 

Brands.cs,Lenses.cs和Manufacturer.cs是我的模型类

Brand.cs

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

namespace EyeContactLens.Models 
{ 
    public class Brands 
    { 
     [Key] 
     public int BrandId { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public List<Lenses> Lenses { get; set; } 

    } 

} 

个Lenses.cs

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

namespace EyeContactLens.Models 
{ 
    public class Lenses 
    { 
     [Key] 
     public int LensesId { get; set; } 
     public int BrandId { get; set; } 
     public int ManufacturerId { get; set; } 
     public string Title { get; set; } 
     public decimal Price { get; set; } 
     public string LensManuUrl { get; set; } 
     public Brands Brand { get; set; } 
     public Manufacturer Manufacturer { get; set; } 
    } 
} 

Manufacturer.cs

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

namespace EyeContactLens.Models 
{ 
    public class Manufacturer 
    { 
     public int ManufacturerId { get; set; } 
     public string Name { get; set; } 
    } 
} 

我有一个SampleData.cs多个类,我想显示在浏览器,其数据。

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

namespace EyeContactLens.Models 
{ 
    public class SampleData : DropCreateDatabaseIfModelChanges<EyeContactLensEntities> 
    { 
     protected override void Seed(EyeContactLensEntities context) 
     { 
      var brands = new List<Brands> 
      { 
       new Brands { Name = "Cooper Vision"}, 
       new Brands { Name = "Fresh Kon"}, 
       new Brands { Name = "Flexcon"}, 
       new Brands { Name = "Avaira"}, 
      }; 

      var manufacturer = new List<Manufacturer> 
      { 
       new Manufacturer { Name = "Oculus"}, 
       new Manufacturer { Name = "Alcon (CIBA Vision)"} 
      }; 

      new List<Lenses> 
      { 
       new Lenses { Title = "Biofinity Contact Lens", Brand = brands.Single(b => b.Name == "Cooper Vision"), Price = 8.99M, Manufacturer = manufacturer.Single(a => a.Name == "Alcon (CIBA Vision)"), LensManuUrl = "/Content/Images/placeholder.gif" }, 
       new Lenses { Title = "FreshKon A55", Brand = brands.Single(b => b.Name == "Fresh Kon"), Price = 18.99M, Manufacturer = manufacturer.Single(a => a.Name == "Oculus"), LensManuUrl = "/Content/Images/placeholder.gif" }, 
       new Lenses { Title = "Flexcon Blue Tint UV Prolong wear (BUPW) (45%)", Brand = brands.Single(b => b.Name == "Flexcon"), Price = 81.99M, Manufacturer = manufacturer.Single(a => a.Name == "Oculus"), LensManuUrl = "/Content/Images/placeholder.gif" }, 
       new Lenses { Title = "Frequency 55 Toric Contact Lens", Brand = brands.Single(b => b.Name == "Cooper Vision"), Price = 10.99M, Manufacturer = manufacturer.Single(a => a.Name == "Alcon (CIBA Vision)"), LensManuUrl = "/Content/Images/placeholder.gif" }, 
       new Lenses { Title = "Freshkon N-Hance Toric", Brand = brands.Single(b => b.Name == "Fresh Kon"), Price = 11.99M, Manufacturer = manufacturer.Single(a => a.Name == "Oculus"), LensManuUrl = "/Content/Images/placeholder.gif" } 
      }.ForEach(a => context.Lenses.Add(a)); 
     } 
    } 
} 

我也使用EyeContactLensEntities.csDbContext

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

namespace EyeContactLens.Models 
{ 
    public class EyeContactLensEntities : DbContext 
    { 
     public DbSet<Lenses> Lenses { get; set; } 
     public DbSet<Brands> Brands { get; set; } 
    } 
} 

web.config

<connectionStrings> 
    <add name="EyeContactLensEntities" connectionString="Data Source=|DataDirectory|EyeContactLens.sdf" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

的Global.asax.cs

protected void Application_Start() 
{ 
    System.Data.Entity.Database.SetInitializer(new Models.SampleData()); 

    AreaRegistration.RegisterAllAreas(); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 
+0

为什么使用Access数据库?为什么不把SQL Server Developer Edition放到你的电脑上? – mason

+0

因为我想通过我的问题中提到的SampleData在浏览器上显示数据。 –

+0

这不能回答我的问题。 – mason

回答

0

您的合作连接字符串错误。 您需要在配置字符串中提供的内容是数据源(例如SQL Server实例)和初始目录(例如该服务器上的数据库)。

.sdf可以用Sql Server Management Studio打开,从那里你应该能够看到你需要连接到什么。

编辑: 如何做到这一点与SQL Server Management Studio中的链接: How do you open an SDF file (SQL Server Compact Edition)?

0

您需要更改的providerName在连接字符串中:

<connectionStrings> 
    <add name="EyeContactLensEntities" 
     connectionString="Data Source=|DataDirectory|EyeContactLens.sdf" 
     providerName="System.Data.SqlSqlServerCe.4.0"/> 
</connectionStrings> 

而且你需要安装SQL Server Compact EF Nuget包:

Install-Package EntityFramework.SqlServerCompact 
+0

我改变了它...但它仍然显示我相同的错误 –

+0

我已更新我的回复! – ErikEJ

相关问题