【问题标题】:Manual Changes to Entity Framework Database causes error手动更改实体框架数据库会导致错误
【发布时间】:2016-08-13 02:59:54
【问题描述】:

我对 Entity Framework 和 C# 还很陌生,所以如果我描述问题的能力有限,我深表歉意。

我有一个托管在 Azure 上的 .NET Web 窗体项目,它使用实体框架来处理所有数据库表。我最近遇到了一个正在调试的问题,我创建了测试记录,一旦使用 Microsoft SQL Server Management Studio 解决了问题,我就删除了这些记录。不幸的是,我现在收到以下错误:

“支持 'RegSysContext' 上下文的模型在创建数据库后发生了变化。考虑使用 Code First 迁移来更新数据库”

RegSysContext 类如下所示。

据我了解,这是由于 Entity Framework 使用的元数据不再与数据库匹配造成的。数据库中的数据必须保留,否则我只会擦除它并忘记它。

如何在托管 Web 应用上解决此问题,以及如何在以后编辑数据库而不导致此问题?

提前致谢!

public class RegSysContext : DbContext
{
    // Default Constructor for the context class
    public RegSysContext() : base("RegSys")
    {

    }

    // Properties of the context class
    public DbSet<CustomerAccountMembership> AccountMembershipRecords { get; set; }

    // For Organization Account functionality
    public DbSet<RegSysAccount> RegSysAccounts { get; set; }
    public DbSet<Subscription> Subscriptions { get; set; }
    public DbSet<SubscriptionRecord> SubscriptionRecords { get; set; }
    public DbSet<PaymentInfo> PaymentAccountInfoRecords { get; set; }

    // For Auction functionality
    public DbSet<Auction> auctions { get; set; }
    public DbSet<AuctionItem> auctionItems { get; set; }
    public DbSet<AuctionLot> auctionLots { get; set; }
    public DbSet<AuctionDonation> auctionDontations { get; set; }
    public DbSet<AuctionSale> auctionSales { get; set; }
    public DbSet<ItemInAuctionRecord> itemInAuctionRecords { get; set; }

    // For Event functionality
    public DbSet<Event> events { get; set; }
    public DbSet<EventParticipant> eventParticipants { get; set; }
    public DbSet<RegistrationPeriod> registrationPeriods { get; set; }
    public DbSet<RegType> regTypes { get; set; }
    public DbSet<RegPrice> regPrices { get; set; }
    public DbSet<EventCategory> EventCategories { get; set; }
    //public DbSet<RegistrationConfig> regConfigs { get; set; }
    //public DbSet<RegFormConfig> regFormConfigs { get; set; }

    // For Organization functionality
    public DbSet<Lodge> Lodges { get; set; }

    // For Participant functionality
    public DbSet<Participant> Participants { get; set; }
    public DbSet<Charge> Charges { get; set; }
    public DbSet<EventParticipantToParticipantLinker> EventParticipantLinks { get; set; }

    // For System functionality
    public DbSet<RegSysMessage> RegSysMessages { get; set; }
    public DbSet<Transaction> Transactions { get; set; }

    // For Trading Post functionality
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<CartItem> ShoppingCartItems { get; set; }
    public DbSet<ProductInventory> ProductInventories { get; set; }
    public DbSet<TradingPost> TradingPosts { get; set; }
    public DbSet<Order> Orders { get; set; }
    public DbSet<OrderDetail> OrderDetails { get; set; }
    public DbSet<ProductSale> ProductSales { get; set; }
    public DbSet<SpecialOffer> SpecialOffers { get; set; }
}

【问题讨论】:

  • 您有没有尝试过任何解决方案?可能有一个here 或here
  • @MarkC。我一直在查看MigrateDatabaseToLatestVersion Initializer,因为它看起来可以满足我的需求,尽管我现在只是想弄清楚如何使用它。
  • 如果您正在执行 Code First,您似乎还没有运行 Update-Database 命令。另外,您是否启用了迁移?
  • 我绝对没有运行过该命令,因为我不熟悉它。你用什么来运行命令,包管理器控制台?如何启用迁移?
  • 你在看教程还是什么?我正在努力弄清楚我可以为您提供哪些资源来帮助您

标签: database entity-framework azure


【解决方案1】:

将此行添加到 RegSysContext 类中的构造函数:

Database.SetInitializer<RegSysContext>(null);

这行代码告诉 Entity Framework 是否创建数据库。将null 传递给IDatabaseInitializer strategy 参数,您基本上完全禁用了数据库的初始化(因为它已经存在)

【讨论】:

  • 谢谢马克,解决了它!
猜你喜欢
  • 2015-03-23
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多