【发布时间】:2017-01-21 06:46:55
【问题描述】:
我向我的 MVC 5 Web API 项目添加了一个新实体,但我无法让它与我现有的 SQL 数据库一起使用。我现有的代码使用工作单元工厂和存储库模式从数据库读取和写入,所以我知道代码有效。没有edmx文件,所以我相信代码最初是先用代码写的。以下是我目前采取的步骤。
步骤 1) 将新实体添加到我的实体文件夹 步骤 2) 更新 DbContext 文件 步骤 3) 更新 UnitOfWork.cs 文件 步骤 4) 使用脚本手动创建新的 SQL 表 第 5 步)将以下代码添加到我的 Web API 服务中
using (var uow = _unitOfWorkFactory.Create())
{
//Code to create newentity object
uow.newEntityRepository.Insert(newentity);
await uow.SaveChangesAsync();
}
我没有收到错误消息。插入根本不会将记录添加到数据库中。
我已经使用 EntityTypeConfiguration 创建了一个实体表映射,并使用 OnModelCreating Override 调用它。
EntityTypeConfiguration
public class NewEntityMap : EntityTypeConfiguration<NewEntity>
{
public NewEntityMap() : base()
{
// Primary Key
this.HasKey(t => t.Id);
// Table & Column Mappings
this.ToTable("NewEntity", "dbo");
this.Property(t => t.Id).HasColumnName("Id");
this.Property(t => t.Created).HasColumnName("Created");
this.Property(t => t.OfferId).HasColumnName("OfferId");
this.Property(t => t.MerchantId).HasColumnName("MerchantId");
this.Property(t => t.ConsumerId).HasColumnName("ConsumerId");
this.Property(t => t.SMSMessage).HasColumnName("SMSMessage");
this.Property(t => t.SendSMS).HasColumnName("SendSMS");
this.Property(t => t.EmailMessage).HasColumnName("EmailMessage");
this.Property(t => t.SendEmail).HasColumnName("SendEmail");
this.Property(t => t.Source).HasColumnName("Source");
this.Property(t => t.FromSMSNumber).HasColumnName("FromSMSNumber");
}
}
OnModelCreating
modelBuilder.Configurations.Add(new newEntityMap());
我仍然无法在表格中更新记录。
有什么想法吗?提前致谢!
【问题讨论】:
-
看起来基于这个 Stack Overflow question 可以手动映射实体而无需进行数据库迁移。 stackoverflow.com/questions/20243796/…
-
这篇博文甚至没有提到数据库迁移的必要性。 cpratt.co/entity-framework-code-first-with-existing-database
标签: entity-framework