所以我运行了SQLServerExpress 2008 R2和Visual Studio 2010.我相信我有一个运行的SQL Server实例(图1)。我被告知,如果我在程序中没有指定连接字符串,EF将在本地SQL Server实例上创建数据库。不是。 。我收到了错误
我的代码如下:
在global.asax.cx
:
protected void Application_Start()
{
Database.SetInitializer(new DatabaseInit());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Horse.cs
:
public class Horse
{
public int HorseID { get; set; }
public string Name { get; set; }
public virtual Participant Participant { get; set; }
}
Participant.cs
:
public class Participant
{
public int ParticipantID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
public Horse Horse { get; set; }
}
MelbourneCupDbContext
:
public class MelbourneCupDbContext : DbContext
{
public DbSet<Horse> Horses;
public DbSet<Participant> Participants;
}
DatabaseInit
:
public class DatabaseInit : DropCreateDatabaseAlways<MelbourneCupDbContext>
{
protected override void Seed(MelbourneCupDbContext context)
{
var Horses = new List<Horse>
{
new Horse{Name="Americain"},
new Horse{Name="Jukebox Jury"},
new Horse{Name="Dunaden"}
....
};
foreach (Horse h in Horses)
context.Horses.Add(h);
context.SaveChanges();
}
}
最后,当我尝试使用数据库(SignUpController.cs
)时:
private MelbourneCupDbContext dbContext = new MelbourneCupDbContext();
[HttpGet]
public ActionResult Index()
{
IEnumerable<Horse> allHorsesList = dbContext.Horses.ToList();
return View(allHorsesList);
}
当我尝试调用ToList时,我的错误是源不能为空。
HALP
图1
答案 0 :(得分:1)
“如果安装了SQL Express(包含在Visual Studio 2010中),则会在本地SQL Express实例(。\ SQLEXPRESS)上创建数据库。如果未安装SQL Express,则Code First将尝试使用LocalDb((localdb) )\ v11.0) - LocalDb包含在Visual Studio 2012“
中答案 1 :(得分:1)
我认为你在谈论EF代码 - 首先这是一篇好文章的引用
按照惯例,DbContext为您创建了一个数据库。
如果本地SQL Express实例可用(默认安装) 使用Visual Studio 2010)然后Code First创建了数据库 该实例如果SQL Express不可用,则Code First将尝试 并使用LocalDb(默认安装在Visual Studio 2012中) 数据库以派生的完全限定名称命名 上下文,在我们的例子中 CodeFirstNewDatabaseSample.BloggingContext这些只是默认值 约定有多种方法可以更改数据库 Code First使用,如何在DbContext中提供更多信息 发现模型和数据库连接主题。
但是你总是可以小心翼翼地改变设置......
这是完整的文章 http://msdn.microsoft.com/en-us/data/jj193542.aspx
在这里
更改数据库的其他方法
还有许多其他方法可以指定应该使用哪个数据库 连接到。我们将在另一篇文章中更详细地介绍这些内容 未来。
App.config Connection String在中创建连接字符串 App.Config文件与您的上下文同名。的DbConnection DbContext上有一个接受DbConnection的构造函数。 替换默认约定用于定位的约定 基于上下文名称的数据库是AppDomain wide设置 你可以通过静态属性进行更改 System.Data.Entity.Database.DbDatabase.DefaultConnectionFactory。
来自这篇文章: http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-code-first-walkthrough.aspx
你看过这个了吗? What is the connection string for localdb for version 11答案 2 :(得分:0)
查看App_Data文件夹。这是默认位置。
“包含应用程序数据文件,包括.mdf数据库文件,XML文件和其他数据存储文件.ASP_Data文件夹用于存储应用程序的本地数据库,例如用于维护成员资格和角色信息的数据库。 “
http://msdn.microsoft.com/en-us/library/ex526337(v=vs.100).aspx