EF 5 - Code First - 无法分割现有数据库中的表

3
我正在尝试使用一对一映射将遗留用户表拆分为两个实体,但是不断出现迁移错误,指出我的数据库不同步,即使我认为已经完成了映射,并且正在尝试建立一对一关系。
这是一个现有的数据库(虽然我正在使用代码优先,因为迁移将在未来变得重要),但我没有向数据库添加任何更改(尽管我不确定一对一表分割需要什么),我一直收到以下提示:
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");
    }
}

数据库表 我知道并不是所有的字段都被映射了,但是在这个阶段我并不需要它们,这难道会是问题吗?

AppUser 数据库表


请澄清一下,您已经在这个模型上运行了迁移吗? - Jamie Burns
我目前没有使用任何迁移,数据库是预先存在的,类的模型应该与数据库的模型匹配。我现在正在全面检查以查看是否有其他问题。 - Modika
尝试运行 update-database -script 命令,查看迁移生成的更改脚本。这应该会给你一个提示,告诉你它缺少了什么。 - Jamie Burns
谢谢,经过一些折腾,我得到了这个脚本...它很庞大,但我认为我可能知道发生了什么。当我开始这个项目时,我是在使用一个现有的数据库,但是模型稍微有些变化,所以我将保持不变的表格和新结构进行了扩充。关键是我改变了数据库并简化了命名规则,例如,“Projects”变成了“Project”,那么如何重置迁移,以便我可以重新开始??? - Modika
就我个人而言,我会删除已添加到项目中的迁移文件夹。不过这样做有点过于粗暴了! - Jamie Burns
说实话,在你提到上面的内容之前,我实际上并没有为这个项目开启迁移,这使得这一切变得更加奇怪! - Modika
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接