Сначала я начал пробовать свои руки с кодом EF4 сегодня, и я создал свои классы POCO, данных и инициализаторы в отдельной библиотеке классов, я считаю, что это обычный код типа плиты котла. Я ссылаюсь на класс в приложении MVC3 и устанавливаю инициализатор в Global.asax. При запуске приложения я замечаю следующие проблемы:
1. Никакая база данных не создается нигде (тогда я добавляю запись в файле web.config для строки соединения, названной в честь класса Context, все равно никакого результата)
2. Когда я попробуйте получить доступ к инициализированным значениям, я получаю нулевую ошибку, очевидно, потому что нет данных.Код элемента Entity Framework Сначала в библиотеке классов
Может кто-нибудь, пожалуйста, помогите мне с указателями о том, как получить Тхи вещь, чтобы работать (было бы стыдно, если бы я провел весь мой рождественский день обучения это, и я до сих пор не могу заставить его работать :() Спасибо
пс я попытался вставить точки останова, и я попал в методе инициализации приложения, но он никогда не попадет в метод Seed в инициализаторе, даже если я добавить точку останова там, как хорошо !!
Спасибо.
Initializer класса
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 App метод инициализации
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);
}
Как насчет размещения класса инициализатора? или, по крайней мере, класс контекста. – LueTm