I am beginner in ASP.NET MVC and trying to Database access with Entity Framework Code-First but I am getting an error. I saw many questions on stackoverflow but they are not relevant to my situation. My error is.
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code
Additional information: Unable to complete operation. The supplied SqlConnection does not specify an initial catalog or AttachDBFileName.
in LensStoreController.cs at
var brands = lensStoreDB.Brands.ToList();
line
LensStoreController.cs
public ActionResult Index()
{
var brands = lensStoreDB.Brands.ToList();
return View(brands);
}
Brands.cs, Lenses.cs and Manufacturer.cs are my Model classes
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; }
}
}
I have one more class SampleData.cs
, whose data I want to show on browser.
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));
}
}
}
I am also using EyeContactLensEntities.cs
as a DbContext
:
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);
}