本文介绍了在Entity Framework迁移中从复杂对象创建字段时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究Entity Framework向.Net Core的迁移,执行迁移时会出现错误。问题在于创建字段到复杂字段。

I am studying Entity Framework migration to .Net Core and when I will execute the migration I get an error. The problem is in create field to a complex field.

我有config类,并且在调试中执行了代码。

I have the config class and in debug the code is executed.

配置类

public void Configure(EntityTypeBuilder<City> builder)
{
    base.Configure(builder);

    builder.Property(x => x.Name)
        .IsRequired()
        .HasColumnType(VARCHAR)
        .HasMaxLength(150);
    builder.Property(x => x.Initials)
        .HasColumnType(VARCHAR)
        .HasMaxLength(5);
    builder.Property(x => x.Code)
        .HasColumnType(VARCHAR)
        .HasMaxLength(5);
    builder.Property(x => x.State)
        .HasColumnType(UNIQUEIDENTIFIER)
        .IsRequired();
    }

我的上下文类

public class DataContext: DbContext
{
    protected virtual DbSet<Country> Country { get; set; }
    protected virtual DbSet<State> State { get; set; }
    protected virtual DbSet<City> City { get; set; }

    public DataContext()
    { }

    public DataContext(DbContextOptions<DataContext> opcoes)
        :base(opcoes)
    { }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ForSqlServerUseIdentityColumns();
        modelBuilder.HasDefaultSchema("MCDATA");

        new CountryConfig().Configure(modelBuilder.Entity<Country>());
        new StateConfig().Configure(modelBuilder.Entity<State>());
        new CityConfig().Configure(modelBuilder.Entity<City>());
    }
}

public class BaseEntity
{
    public Guid Id { get; set; }
    public DateTime RegisterDate { get; set; }
    public DateTime LastChangeDate { get; set; }
    public Status Status { get; set; }
}

public class City: BaseEntity, IEquatable<City>
{
    public string Name { get; set; }
    public string Initials { get; set; }
    public string Code { get; set; }
    public State State { get; set; }

    public bool Equals(City other)
    {
        throw new NotImplementedException();
    }
}

public class State: BaseEntity, IEquatable<State>
{
    public string Name { get; set; }
    public string Code { get; set; }
    public string Initials { get; set; }
    public Country Country { get; set; }

    public bool Equals(State other)
    {
        throw new NotImplementedException();
    }
}

public DataContext CreateDbContext(string[] args)
{
    var construtor = new DbContextOptionsBuilder<DataContext>();
    construtor.UseSqlServer(CONNECTIONSTRING);
    return new DataContext(construtor.Options);
}

问题出在 context.Database.Migrate( );

var context = dbFactory.CreateDbContext(new string[] {});
context.Database.Migrate();

消息为:


推荐答案

在CityConfig类中更改代码:

In the CityConfig class change the code:

    public override void Configure(EntityTypeBuilder<City> builder)
    {
        base.Configure(builder);

        builder.Property(x => x.Name)
            .IsRequired()
            .HasColumnType(VARCHAR)
            .HasMaxLength(150);
        builder.Property(x => x.Initials)
            .HasColumnType(VARCHAR)
            .HasMaxLength(5);
        builder.Property(x => x.Code)
            .HasColumnType(VARCHAR)
            .HasMaxLength(5);
        // Remove this
        //builder.Property(x => x.State)
        //    .HasColumnType(UNIQUEIDENTIFIER)
        //    .IsRequired();

        // Add this
        builder
            .HasOne(y => y.State)
            .WithMany();
    }

这篇关于在Entity Framework迁移中从复杂对象创建字段时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 06:51