本文介绍了在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迁移中从复杂对象创建字段时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!