我是Visual Studio和.NET的新手,我正在按照Lynda上的本教程(使用实体框架进行代码优先的开发)创建ASP.NET MVC应用程序,在该应用程序中我应该能够将Tour对象添加到数据库使用表单。
我创建了一个MyDbContext
继承自的类DbContext
。
我添加了一个基类构造函数,并带有从表单提交信息时需要为此应用创建的数据库的名称。我还添加了一个DbSet
名称Tours
,用于保存游览对象。
这是MyDBContext.cs中的代码:
public class MyDBContext : DbContext
{
public MyDBContext() : base("ExploreCalifornia")
{
}
public DbSet<Tour> Tours { get; set; }
}
在游览控制器中,我创建一个MyDbContext
名为的实例db
:
private MyDBContext db = new MyDBContext();
我有一个Create
页面,其中包含添加新游览的表单,这是此页面的POST路线:
[HttpPost]
public ActionResult Create(Tour tour)
{
try
{
db.Tours.Add(tour);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
在调试器之后,当我尝试添加新的游览时,它会跳过该SaveChanges
行并直接进入catch块。不会创建任何数据库,并且在解决方案资源管理器中的App_Data下什么也不会显示。
本教程提到将使用SQL Server Express LocalDB创建数据库,但在服务器资源管理器中看不到对LocalDB的任何引用。这仍然是新事物,所以我对如何解决这个问题有些迷茫。
关于可能出什么问题或从哪里开始寻找的任何想法?
问题是,当您将DbContext的构造函数与字符串参数一起使用时,该参数必须为1.来自app.config或web.config形式的连接字符串的名称name=MyConnectionString
。例如,您的配置包含
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="MyConnectionString" connectionString="your str here" />
</connectionStrings>
</configuration>
然后你这样声明你的上下文
public class MyDBContext : DbContext
{
public MyDBContext() : base("name=MyConnectionString")
{
}
public DbSet<Tour> Tours { get; set; }
}
或2.直接连接字符串,像这样
public class MyDBContext : DbContext
{
public MyDBContext() : base("Server=(local), Database=MyDBName, User=blah-blah...")
{
}
public DbSet<Tour> Tours { get; set; }
}
请注意,如果使用配置文件,则该文件必须位于AppDomain目录中(对于exe,是其文件夹;对于网站,则是站点的bin文件夹)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句