Entity Framework не создает базу данных - PullRequest
0 голосов
/ 13 февраля 2012

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

Я новичок в этом аргументе, так что наберитесь терпения ... Я впервые создал базу данных, и все кажется правильным; но из-за того, что я не создал метод 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);
        }
    }

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

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

Ошибка, которую я получаю:

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: 

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

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

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; }
}

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

0 голосов
/ 13 февраля 2012

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

protected override void Seed(WidgetDbContext context)
{

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...