EF在哪里创建我的数据库?如果是。

时间:2013-05-24 09:16:08

标签: asp.net-mvc-3 entity-framework sql-server-express

所以我运行了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 Server Instance Running

3 个答案:

答案 0 :(得分:1)

“如果安装了SQL Express(包含在Visual Studio 2010中),则会在本地SQL Express实例(。\ SQLEXPRESS)上创建数据库。如果未安装SQL Express,则Code First将尝试使用LocalDb((localdb) )\ v11.0) - LocalDb包含在Visual Studio 2012“

有关详细信息:http://msdn.microsoft.com/en-us/data/jj591621.aspx

答案 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