2012-02-13 15 views
0

Я создаю базу данных с сущностью, в приложении mvc asp.net, сначала используя код.Entity Framework не создает базу данных

Я новичок в аргументе, поэтому будьте терпеливыми ... Я создал базу данных в первый раз, и все кажется правильным; но couse из i не создал метод DropCreateDatabaseIfModelChanges для изменения таблиц, которые я решил вручную удалить базу данных.

Проблема в том, что база данных не воссоздает!

Я реализовал инициализатор, и это в другой класс из контекста ...

public class WidgetDbInitializer : DropCreateDatabaseIfModelChanges<WidgetDbContext> 
    { 
} 

выставиться его в Global.asax.cs и вынужден Инициализировать что

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 

     Database.SetInitializer<Portale.Models.WidgetDbContext>(new Portale.Models.WidgetDbInitializer()); 
     var _initer = new WidgetDbInitializer(); 

     using (var db = new WidgetDbContext()) 
     { 
      _initer.Seedit(db); 
      db.Database.Initialize(true); 
     } 
    } 

У меня только стандартная строка подключения couse теперь мне все равно ...

Пожалуйста, помогите мне, я прочитал множество статей по сети, и я не могу получить решение ...

Я получаю ошибку:

System.ArgumentNullException non è stata gestita dal codice utente 
    Message=Il valore non può essere null. 
Nome parametro: key 
    Source=mscorlib 
    ParamName=key 
    StackTrace: 
     in System.Collections.Generic.Dictionary`2.FindEntry(TKey key) 
     in System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value) 
     in System.Data.Entity.ModelConfiguration.Configuration.Mapping.SortedEntityTypeIndex.Add(EdmEntitySet entitySet, EdmEntityType entityType) 
     in System.Data.Entity.ModelConfiguration.Configuration.Mapping.EntityMappingService.Analyze() 
     in System.Data.Entity.ModelConfiguration.Configuration.Mapping.EntityMappingService.Configure() 
     in System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntityTypes(DbDatabaseMapping databaseMapping, DbProviderManifest providerManifest) 
     in System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.Configure(DbDatabaseMapping databaseMapping, DbProviderManifest providerManifest) 
     in System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) 
     in System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) 
     in System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) 
     in System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) 
     in System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 
     in System.Data.Entity.Internal.InternalContext.Initialize() 
     in System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
     in System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
     in System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 
     in System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() 
     in System.Linq.Queryable.Join[TOuter,TInner,TKey,TResult](IQueryable`1 outer, IEnumerable`1 inner, Expression`1 outerKeySelector, Expression`1 innerKeySelector, Expression`1 resultSelector) 
     in Portale.Controllers.WidgetContainerController.Index() in C:\Users\doompro\Documents\Visual Studio 2010\Projects\Portale\Portale\Controllers\WidgetContainerController.cs:riga 56 
     in lambda_method(Closure , ControllerBase , Object[]) 
     in System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
     in System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
     in System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
     in System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() 
     in System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    InnerException: 
+1

База данных будет создана только после того, как вы сделаете что-то в своем приложении для доступа к ней. Если вы напишите код, который пытается получить к нему доступ, а затем запустите его, что произойдет? Если база данных не создается, вы должны получить ошибку, не так ли? –

+0

Да, каждый раз, когда я пытаюсь что-то сделать; ДЛЯ ПРИМЕРА CREATEIFNOTEXIST -.- У меня есть ошибка исключения, параметр KEY не может быть нулевым. Это для каждой операции, которую я пытаюсь сделать для базы данных. База данных.mdf по-прежнему не создается в папке данных sqlexpress, ни в app_data моего приложения, она просто не существует – doompro

+0

Добавьте код, который вы используете для доступа к базе данных, и полученную вами ошибку. –

ответ

0

переопределить функцию семян в классе WidgetDbInitializer и попытаться добавить некоторые данные в вашу базу данных.

protected override void Seed(WidgetDbContext context) 
{ 

context.yourodel.add(new class()) 
} 

Сначала проверьте, правильно ли вы заработали надземное семя, а если ваша база данных не генерируется, вы получите исключение.

+0

Я уже пробовал, каждый раз, когда я пытаюсь получить доступ к базе данных, я получаю ту же ошибку: ArgumentNullException, параметр «ключ» не может быть нулевым. И база данных все еще не создана; либо, когда нет ключа параметра для метода, или когда я передаю элемент с атрибутом ключа, не равным нулю, чтобы вставить в базу данных – doompro

+0

, поделитесь трассировкой стека при получении ошибки – MHF

+0

> Portale.DLL! Portale.Models.WidgetDbInitializer.Init (Portale.Models.WidgetDbContext) Строка 15 \t Portale.DLL! Portale.MvcApplication.Application_Start() Линия 47 + 0xd байт – doompro

0

Решена проблема:

public class Widget 
{ 
    //This properties rapresent the primary key for entity framework 
    [Key] 
    public int WidgetID { get; set; } 
    //Foreing key to the column where this widget is stored 
    public virtual int ColumnID { get; set; } 
    //The title of the widget 
    public string Title { get; set; } 
    //Controller of the Widget, this property may be used on the RenderAction call 
    public string Controller { get; set; } 
    //ActionMethod of the Widget, this property may be used on the RenderAction call 
    public string ActionMethod { get; set; } 
    //The Type of the Model, used on deserialization 
    public Type ModelType { get; set; } 
    //The context of the widget 
    public string SerializedModel { get; set; } 
} 

база данных просто не принимал типа «Тип», все работает нормально, как только я удалил это поле ... Я просто не смотрел на него, потому что он работал с типом «Объект», не ожидал, что это не с типом.

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