我正在尝试使用一对一映射将遗留用户表拆分为两个实体,但是不断出现迁移错误,指出我的数据库不同步,即使我认为已经完成了映射,并且正在尝试建立一对一关系。
这是一个现有的数据库(虽然我正在使用代码优先,因为迁移将在未来变得重要),但我没有向数据库添加任何更改(尽管我不确定一对一表分割需要什么),我一直收到以下提示:
我可以更新数据库(无论是手动还是通过迁移),但不知道实际上哪些内容不同步,因为没有添加新字段并且名称相匹配。 BaseEntity:
这是一个现有的数据库(虽然我正在使用代码优先,因为迁移将在未来变得重要),但我没有向数据库添加任何更改(尽管我不确定一对一表分割需要什么),我一直收到以下提示:
The model backing the 'Context' context has changed since the database was created. Consider using Code First Migrations to update the database
我可以更新数据库(无论是手动还是通过迁移),但不知道实际上哪些内容不同步,因为没有添加新字段并且名称相匹配。 BaseEntity:
public abstract class BaseEntity<T>
{
[Key]
public T Id { get; set; }
public DateTime CreatedOn { get; set; }
}
会员模型:
public class Membership : BaseEntity<Guid>
{
public string UserName { get; set; }
public bool Approved { get; set; }
public bool Locked { get; set; }
public Profile Profile { get; set; }
}
个人资料模型:
public class Profile : BaseEntity<Guid>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Telephone { get; set; }
public string Extension { get; set; }
public Membership Membership { get; set; }
}
会员映射(这是一对一的定义):
public class MembershipMap : EntityTypeConfiguration<Membership>
{
public MembershipMap()
{
//Primary Key
this.HasKey(t => t.Id);
//**Relationship Mappings
this.HasRequired(m => m.Profile)
.WithRequiredPrincipal(p => p.Membership);
//Properties & Column mapping
this.Property(m => m.Id)
.HasColumnName("PKID")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.Property(m => m.UserName)
.HasColumnName("Username")
.HasMaxLength(255);
this.Property(m => m.Approved)
.HasColumnName("IsApproved");
this.Property(m => m.Locked)
.HasColumnName("IsLocked");
this.Property(m => m.CreatedOn)
.HasColumnName("CreationDate");
this.ToTable("AppUser");
}
}
档案映射:
public class ProfileMap : EntityTypeConfiguration<Profile>
{
public ProfileMap()
{
//Primary Key
this.HasKey(t => t.Id);
//Properties & Column mapping
this.Property(m => m.Id)
.HasColumnName("PKID")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.Property(m => m.FirstName)
.HasColumnName("FirstName");
this.Property(m => m.LastName)
.HasColumnName("LastName");
this.Property(m => m.Email)
.HasColumnName("Email");
this.Property(m => m.Telephone)
.HasColumnName("Telephone");
this.Property(m => m.Extension)
.HasColumnName("Extension");
this.ToTable("AppUser");
}
}
数据库表 我知道并不是所有的字段都被映射了,但是在这个阶段我并不需要它们,这难道会是问题吗?
update-database -script
命令,查看迁移生成的更改脚本。这应该会给你一个提示,告诉你它缺少了什么。 - Jamie Burns