2013-05-24 6 views
2

Итак, у меня работает SQLServerExpress 2008 R2 и Visual Studio 2010. Я считаю, что у меня есть экземпляр SQL Server (рис.1). Мне сообщили, что если я не укажу строку подключения в своей программе, EF создаст базу данных на локальном экземпляре SQL Server. Это не так. , .Я получаю ошибкуГде EF создает мою базу данных? Если это.

Мой код выглядит следующим образом:

В 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

ответ

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

Это не объясняет, почему я получаю нулевой источник? Его нужно где-то создавать? – JohnW

0

Взгляните на папку App_Data. Это местоположение по умолчанию.

«Содержит файлы данных приложений, включая файлы базы данных .mdf, файлы XML и другие файлы хранилища данных. Папка App_Data используется ASP.NET для хранения локальной базы данных приложения, такой как база данных для поддержки членства и информации о роли «.

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

+1

В моей файловой структуре проекта нет папки App_Data :( – JohnW

1

Я думаю, что ваше говорят о EF-код первого это цитата из хорошей статьи

Конвенции DbContext создала базу данных для вас.

Если локальный экземпляр SQL Express доступен (по умолчанию устанавливается с Visual Studio 2010), то код сначала была создана база данных по , что, например, если 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 Connection String Создайте строку подключения в файле 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

ли вы видели это? What is the connection string for localdb for version 11

+0

Правильно. Я прочитал эти статьи, и я ожидаю, что Visual Studio создаст базу данных на моем экземпляре SQL Server (рис.1). Однако это не так, t, похоже, делает это/создавая базу данных вообще (на локальном экземпляре sql-сервера или LocalDb). Таким образом, ошибка нулевого источника. – JohnW

+0

вы пытались указать строку соединения, используя (var db = new Context ("connectionString")) ? – silverfighter

+1

обновил ответ на другую ссылку на buttom – silverfighter

Смежные вопросы