2

所以我运行了 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 时出现错误。

哈尔普

图。1 服务器实例运行

4

3 回答 3

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

于 2013-05-24T09:21:14.813 回答
1

我认为您在谈论 EF 代码优先这是一篇好文章的引述

按照惯例,DbContext 已为您创建了一个数据库。

如果本地 SQL Express 实例可用(默认情况下随 Visual Studio 2010 安装),则 Code First 已在该实例上创建数据库如果 SQL Express 不可用,则 Code First 将尝试使用 LocalDb(默认情况下随 Visual Studio 2012 安装) ) 数据库以派生上下文的完全限定名称命名,在我们的例子中是 CodeFirstNewDatabaseSample.BloggingContext 这些只是默认约定,有多种方法可以更改 Code First 使用的数据库,更多信息可在 How DbContext 发现模型和数据库连接主题。

但是您可以随时更改设置...

这是完整的文章 http://msdn.microsoft.com/en-us/data/jj193542.aspx

和这里

其他更改数据库的方法

还有许多其他方法可以指定应连接到哪个数据库。我们将在以后的另一篇文章中更详细地介绍这些内容。

App.config 连接字符串 在 App.Config 文件中创建一个与您的上下文同名的连接字符串。DbConnection 在 DbContext 上有一个接受 DbConnection 的构造函数。替换默认约定 用于根据上下文名称定位数据库的约定是 AppDomain 范围的设置,您可以通过静态属性 System.Data.Entity.Database.DbDatabase.DefaultConnectionFactory 进行更改。

来自这篇文章:http: //blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-code-first-walkthrough.aspx

你看到这个了吗? 版本 11 的 localdb 的连接字符串是什么

于 2013-05-24T09:31:00.170 回答
0

查看 App_Data 文件夹。这是默认位置。

“包含应用程序数据文件,包括 .mdf 数据库文件、XML 文件和其他数据存储文件。ASP.NET 使用 App_Data 文件夹来存储应用程序的本地数据库,例如用于维护成员资格和角色信息的数据库。”

http://msdn.microsoft.com/en-us/library/ex526337(v=vs.100).aspx

于 2013-05-24T09:21:55.133 回答