3

我正在尝试使用一对一映射将旧用户表拆分为两个实体,但不断收到迁移错误,指出我的数据库不同步,即使所有内容(我认为已映射)并且我正在尝试制作一个 -一对一的关系。

这是一个现有的数据库(尽管我首先使用代码,因为迁移将变得很重要)但我没有对数据库添加任何更改(尽管我不确定一对一的表拆分究竟期望什么),我不断得到这个:

The model backing the 'Context' context has changed since the database was created.     Consider using Code First Migrations to update the database

我可以更新数据库(手动或通过迁移),但不知道实际上什么不同步,因为没有添加新字段并且名称匹配。

基本实体:

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; }
}

成员映射(具有 1 对 1 定义):

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 数据库表

4

1 回答 1

0

问题不是代码优先映射,而是由我切换数据库和一些胭脂迁移引起的。

要重置迁移,您可以在此处从后续问题中查看答案:

重置实体框架 5 的上下文,使其认为它与初始化的数据库一起工作 - 代码优先

向 EvilBHonda 致敬

于 2013-08-07T16:08:21.997 回答