Я только что начал пробовать свои силы на коде EF4 этим утром и создал свои классы POCO, контекст данных и классы Initializer в отдельной библиотеке классов, я считаю, что это обычный код типа котельной пластины.Я ссылаюсь на класс в приложении MVC3 и устанавливаю инициализатор в Global.asax.При запуске приложения я замечаю следующие проблемы
1. База данных нигде не создается (затем я добавляю запись в web.config для строки подключения, названной в честь класса Context, но по-прежнему ничего не получается)
2.Когда я пытаюсь получить доступ к инициализированным значениям, я получаю нулевую ошибку, очевидно, из-за отсутствия данных.
Может кто-нибудь, пожалуйста, помогите мне с указателями о том, как заставить это работать (было бы стыдно, если бы яЯ потратил на изучение всего этого Рождество, и я до сих пор не могу заставить его работать :() Спасибо
ps. Я попытался вставить точки останова, и я нажал на метод инициализации приложения, но он никогда не попадает в метод Seed в инициализаторе, хотяТакже я добавляю точку останова !!
Спасибо.
Класс инициализатора
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using F2AController.Models;
namespace F2AController.DataObjects
{
public class F2AInitializer : DropCreateDatabaseAlways<F2AContext>
{
protected override void Seed(F2AContext context)
{
var countries = new List<Country>
{
new Country(){ CountryName="Germany", Active = true},
new Country(){ CountryName="Britain", Active = true}
};
countries.ForEach(s => context.Countries.Add(s));
context.SaveChanges();
var providers = new List<Providers>()
{
new Providers(){ ProviderName="InfoBip", ContactDetails="Rturo Manovic", Active=true, MessageRates= new List<ProviderRates>(){new ProviderRates(){ CountryId=1, DateCreated=DateTime.Now, DateModified=DateTime.Now, Rate=0.05M, Active=true}}}
};
providers.ForEach(p => context.Providers.Add(p));
context.SaveChanges();
var usermobiles = new List<MobileTerminal>()
{
new MobileTerminal(){ Active= true, Credits=200, DateCreated=DateTime.Now, MSISDN="4477565444865"}
};
usermobiles.ForEach(u => context.MobileTerminals.Add(u));
context.SaveChanges();
}
}
}
Контекстный класс
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace F2AController.Models
{
public class F2AContext : DbContext
{
public DbSet<Country> Countries;
public DbSet<MobileTerminal> MobileTerminals;
public DbSet<Providers> Providers;
public DbSet<ProviderRates> ProviderRates;
public DbSet<Property> Properties;
public DbSet<ShortMessage> ShortMessages;
public DbSet<UserProperties> UserProperties;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
}
Global.asax Метод инициализации приложения
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
Database.DefaultConnectionFactory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["F2AContext"].ConnectionString);
Database.SetInitializer<F2AContext>(new F2AInitializer());
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}