Я пишу, работая с базой данных, которая была предварительно обработана, и что я создал определения DBSet для таблиц. Текущая база данных была унаследована от предыдущей системы и содержит более 100 000 строк данных в таблице (транзакции более 5 лет). Мы помещаем это в новое приложение, перенося данные.База данных уже создана, новые таблицы не добавляются в
Итак, база данных была создана вручную, а не код в первую очередь. Новые классы - это код в первую очередь, и мы надеемся, что эти таблицы будут автоматически генерироваться в таблицу.
Я проверил, и у пользователя есть доступ к базе данных, которую мы используем для доступа к базе данных. База данных также не находится в ReadOnly.
Ниже класс Context, который был создан:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using BHI.WCMS.DAL;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;
namespace BHI.WCMS.DAL.Partner
{
public class PartnerContext : DbContext
{
public PartnerContext()
: base("partner")
{
//Configuration.LazyLoadingEnabled = false;
Database.SetInitializer<PartnerContext>(new MigrateDatabaseToLatestVersion<PartnerContext, PartnerConfiguration>());
}
public PartnerContext(string ConnectionStringName)
: base(ConnectionStringName)
{
}
//protected override void OnModelCreating(DbModelBuilder modelBuilder)
//{
// modelBuilder.Entity<PartnerProfileServiceCenterTransaction>().Property(p => p.AmountDue).HasPrecision(8, 2);
// base.OnModelCreating(modelBuilder);
//}
public DbSet<WarrantyForms> WarrantyForms { get; set; }
public DbSet<WarrantyFormLines> WarrantyFormLines { get; set; }
public DbSet<WarrantyFormLineParts> WarrantyFormLineParts { get; set; }
public DbSet<WarrantyFormLineReplacements> WarrantyFormLineReplacements { get; set; }
public DbSet<PartnerProfile> PartnerProfiles { get; set; }
public DbSet<PartnerProfileContactInfo> PartnerProfileContactInfos { get; set; }
public DbSet<PartnerProfileCustomerAddress> PartnerProfileCustomerAddresses { get; set; }
public DbSet<PartnerProfileServiceCenterTransaction> PartnerProfileServiceCenterTransactions { get; set; }
public static PartnerProfile InsertPartnerProfile(PartnerProfile profile)
{
using (var db = new PartnerContext())
{
foreach (var addy in profile.BillingAddress)
{
addy.DateCreated = DateTime.Now;
addy.DateModified = DateTime.Now;
db.PartnerProfileCustomerAddresses.Add(addy);
db.SaveChanges();
}
//profile.DateCreated = DateTime.Now;
//profile.DateModified = DateTime.Now;
//db.PartnerProfiles.Add(profile);
//db.SaveChanges();
}
return profile;
} // end of public static PartnerProfile InsertPartnerProfile(PartnerProfile profile)
public static PartnerProfile UpdatePartnerProfile(PartnerProfile profile)
{
using (var db = new PartnerContext())
{
}
return profile;
} // end of public static PartnerProfile UpdatePartnerProfile(PartnerProfile profile)
public static PartnerProfile SelectPartnerProfile(PartnerProfile profile)
{
using (var db = new BHI.WCMS.DAL.Partner.PartnerContext())
{
}
return profile;
} // end of public static PartnerProfile SelectPartnerProfile(PartnerProfile profile)
} // end of class WarrantyContext : DbContext
internal sealed class PartnerConfiguration : DbMigrationsConfiguration<PartnerContext>
{
public PartnerConfiguration()
{
AutomaticMigrationsEnabled = true;
}
}
} // end of namespace BHI.WCMS.DAL.Partner
Я посмотрел на добавление конфигурации за другие статьи
- Confusion over EF Auto Migrations and seeding - seeding every program start
- http://www.scriptscoop.bid/t/1c411f565b56/tables-are-not-reflecting-on-database-on-vs-2013-by-using-code-first-a.html
и что не работал. Я также попытался запустить это Enable-Migrations -ContextTypeName BHI.WCMS.DAL.Partner.PartnerContext -EnableAutomaticMigrations
И это тоже не сработало. Когда я изменяю Контекст от Партнера к Журналированию (база данных, которая была 100% -ным кодом сначала), она загружает таблицы без проблем. Таким образом, это приводит меня сделать следующие предположения:
- Существует не проблема с файлами классы определения таблиц
- Существует не проблема с файлом DbContext, который ссылающиеся файлами
- Поскольку Я могу получить данные из базы данных для старых таблиц, нет проблемы с именем пользователя/паролем для базы данных.
- Поскольку учетная запись пользователя имеет доступ к db_owner, не должно быть никаких проблем с базой данных.
Все, что сказано, я смотрю на это и не могу заставить таблицы создавать. Таким образом, в тех таблицах, которые там есть, что-то не так, или проблема с самой базой данных (таблица __MigrationHistory отсутствует).
Сообщение об ошибке я получаю это:
Exception: System.Data.Entity.Infrastructure.DbUpdateException
Message: An error occurred while updating the entries. See the inner exception for details.
Source: EntityFramework
at System.Data.Entity.Internal.InternalContext.SaveChanges()
at BHI.WCMS.DAL.Partner.WarrantyContext.InsertPartnerProfile(PartnerProfile profile) in c:\inetpub\Bissell SiteCore\Dev\Partners-Dev\BHI.WCMS\BHI.WCMS.DAL\Partner\WarrantyContext.cs:line 47
at BHI.WCMS.ECommerce.BWS.Partner.MapServiceToObject(ServiceCenterResponse response) in c:\inetpub\Bissell SiteCore\Dev\Partners-Dev\BHI.WCMS\BHI.WCMS.ECommerce.BWS\Partner.cs:line 151
at BHI.WCMS.ECommerce.BWS.Partner.BWSGetServiceCenterInfo(String accountNumber, String zipCode) in c:\inetpub\Bissell SiteCore\Dev\Partners-Dev\BHI.WCMS\BHI.WCMS.ECommerce.BWS\Partner.cs:line 48
Nested Exception
Exception: System.Data.Entity.Core.UpdateException
Message: An error occurred while updating the entries. See the inner exception for details.
Source: EntityFramework
at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction)
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction)
at System.Data.Entity.Internal.InternalContext.SaveChanges()
Nested Exception
Exception: System.Data.SqlClient.SqlException
Message: Invalid object name 'dbo.PartnerProfileCustomerAddresses'.
Source: .Net SqlClient Data Provider
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at Glimpse.Ado.AlternateType.GlimpseDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
at System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.Execute(Dictionary`2 identifierValues, List`1 generatedValues)
at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()
Любая помощь по этому вопросу было бы весьма признателен.
Благодаря Роберт