【问题标题】:Cannot create database when using POCO generated classes as entitis使用 POCO 生成的类作为实体时无法创建数据库
【发布时间】:2014-04-11 11:51:39
【问题描述】:

出于某种原因,我从我的数据库设计开始我的开发。然后我使用 POCO 来生成我的实体、实体配置和上下文。

如果配置文件的连接字符串中指定的数据库不存在,我想让我的应用程序创建新数据库。

我目前面临的问题如下: 当我尝试从模型的 DBSet 中获取 FirstOrDefault 时,我收到以下错误消息

System.Data.Entity.Core.EntityCommandExecutionException:错误 执行命令定义时发生。见内 细节例外。 ---> System.Data.SqlClient.SqlException: 对象名称“dbo.Role”无效。

我正在使用我的实体的以下配置

 internal class RoleConfiguration : EntityTypeConfiguration<Role>
    {
        public RoleConfiguration(string schema = "dbo")
        {
            ToTable("Role", schema);
            HasKey(x => x.RoleId);

            Property(x => x.RoleId).HasColumnName("RoleId").IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
            HasMany(t => t.Roles_RoleId).WithMany(t => t.Roles_ChildRoleId).Map(m =>
            {
                m.ToTable("RoleRoles", schema);
                m.MapLeftKey("ChildRoleId");
                m.MapRightKey("RoleId");
            });
        }
    }

【问题讨论】:

  • 您的数据库中有Role 表吗?
  • 这正是问题所在。在我的情况下,没有在我的连接字符串中指定的数据库,我希望创建数据库。

标签: c# entity-framework sql-server-2012 entity-framework-6


【解决方案1】:

如果您希望 EF 为您创建数据库,您需要在上下文构造函数中设置正确的初始化程序。比如这样:

public YourContextEntities() : base("name=ConnectionStringName")
{
    Database.SetInitializer(new CreateDatabaseIfNotExists<YourContextEntities>());
}

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 2011-11-16
    • 2012-05-05
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多