【发布时间】:2015-08-11 17:56:24
【问题描述】:
我正在使用实体通过代码优先迁移连接到现有数据库。在数据库中,我需要连接到一些已经存在的表并添加一些新表。我以为我已经弄清楚了,但它仍在尝试创建已经存在的表。这是其中一张表的模型:
namespace PTEManager.Domain
{
public partial class OpsUser
{
public int u_user_id { get; set; }
public Guid DepartmentID { get; set; }
public string email_addr { get; set; }
public string first_nme { get; set; }
public string last_nme { get; set; }
public Guid msrepl_tran_version { get; set; }
public string status { get; set; }
public string user_nme { get; set; }
public int u_branch_id { get; set; }
}
}
这是我将该模型映射到表格的地方:
namespace PTEManager.Domain.Mapping
{
class UserMap : EntityTypeConfiguration<OpsUser>
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.u_user_id);
// Properties
this.Property(t => t.DepartmentID);
this.Property(t => t.email_addr)
.IsRequired()
.HasMaxLength(50);
this.Property(t => t.first_nme)
.IsRequired()
.HasMaxLength(30);
this.Property(t => t.last_nme)
.IsRequired()
.HasMaxLength(30);
this.Property(t => t.msrepl_tran_version)
.IsRequired();
this.Property(t => t.status)
.IsRequired()
.HasMaxLength(1);
this.Property(t => t.user_nme)
.IsRequired()
.HasMaxLength(15);
this.Property(t => t.u_branch_id)
.IsRequired();
// Table & Column Mappings
this.ToTable("Users");
this.Property(t => t.u_user_id).HasColumnName("u_user_id");
this.Property(t => t.DepartmentID).HasColumnName("DepartmentID");
this.Property(t => t.email_addr).HasColumnName("email_addr");
this.Property(t => t.first_nme).HasColumnName("first_nme");
this.Property(t => t.last_nme).HasColumnName("last_nme");
this.Property(t => t.msrepl_tran_version).HasColumnName("msrepl_tran_version");
this.Property(t => t.status).HasColumnName("status");
this.Property(t => t.user_nme).HasColumnName("user_nme");
this.Property(t => t.u_branch_id).HasColumnName("u_branch_id");
}
}
}
这是我的 dbContext:
namespace PTEManager.Domain.Data
{
public class DataContext : DbContext, IDataContext
{
static DataContext()
{
Database.SetInitializer<DataContext>(null);
}
public DataContext()
: base("OPSPROD")
{
}
///
public DbSet<OpsUser> OpsUsers { get; set; }
public DbSet<Package> Packages { get; set; }
public DbSet<PTEInteractiveCourse> PTEInteractiveCourses { get; set; }
public DbSet<PTETrackingClass> PTETrackingClasses { get; set; }
public DbSet<STCIProductInteractiveInfo> STCIProductInteractiveInfos { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserMap());
modelBuilder.Configurations.Add(new PackageMap());
modelBuilder.Configurations.Add(new STCIProductInteractiveInfoMap());
}
}
}
但是,当我添加一个新的迁移时,它仍然会创建这个:
CreateTable(
"dbo.Users",
c => new
{
u_user_id = c.Int(nullable: false, identity: true),
DepartmentID = c.Guid(nullable: false),
email_addr = c.String(nullable: false, maxLength: 50),
first_nme = c.String(nullable: false, maxLength: 30),
last_nme = c.String(nullable: false, maxLength: 30),
msrepl_tran_version = c.Guid(nullable: false),
status = c.String(nullable: false, maxLength: 1),
user_nme = c.String(nullable: false, maxLength: 15),
u_branch_id = c.Int(nullable: false),
})
.PrimaryKey(t => t.u_user_id);
只是为了确保我尝试运行 update-database 并且它会告诉我
数据库中已经有一个名为“用户”的对象。
这是我找到有关映射到现有表的信息的地方:
http://www.codeproject.com/Tips/661053/Entity-Framework-Code-First-Map
如何防止它尝试创建现有表并仅映射到它?
【问题讨论】:
-
您在哪里将
UserMap配置添加到“DbModelBuilder”? -
@T.Rahgooy,对不起,我忘了添加我的 datacontext 类 - 我现在将它添加到原始问题中。
-
如果现有表具有您想要的确切属性,只需注释创建表并应用迁移。
-
@T.Rahgooy 现在它说:“列 'dbo.Users.u_user_id' 与在外键 'FK_dbo.PTEInteractiveCourses_dbo.Users_ModifyUserId' 中引用列 'PTEInteractiveCourses.ModifyUserId' 的数据类型不同. 无法创建约束。"
-
PTEInteractiveCourses中引用该表的外键ModifyUserId是int吗?
标签: c# asp.net-mvc entity-framework model entity-framework-migrations