0

这里有我的域实体的EntityFramework代码首先FluentAPI TPC

public class Province 
{ 
    private ICollection<City> _cities; 

    public virtual ICollection<City> Cities 
    { 
     get { return _cities ?? (_cities = new HashSet<City>()); } 
     set { _cities = value; } 
    } 

    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual double Latitude { get; set; } 
    public virtual double Longitude { get; set; } 
} 

public class City 
{ 
    private Province _province; 

    public virtual Province Province 
    { 
     get { return _province ?? (_province = new Province()); } 
     set { _province = value; } 
    } 

    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Latitude { get; set; } 
    public virtual string Longitude { get; set; } 
} 

映射

public class ProvinceMap : EntityTypeConfiguration<Province> 
{ 
    public ProvinceMap() 
    { 
     this.ToTable("Province"); 

     this.HasKey(p => p.Id); 

     this.Property(x => x.Id).HasColumnName("Id"); 
     this.Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
     this.Property(x => x.Name).HasMaxLength(50).IsRequired(); 
     this.Property(x => x.Latitude).IsRequired(); 
     this.Property(x => x.Longitude).IsRequired(); 

     //this.HasMany(x => x.Cities) 
     // .WithRequired(x => x.Province) 
     // .HasForeignKey(x => x.Id); 
    } 
} 

public class CityMap : EntityTypeConfiguration<City> 
{ 
    public CityMap() 
    { 
     this.ToTable("City"); 

     this.HasKey(x => x.Id); 

     this.Property(x => x.Id).HasColumnName("Id"); 
     this.Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
     this.Property(x => x.Name).HasMaxLength(50).IsRequired(); 
     this.Property(x => x.Latitude).IsRequired(); 
     this.Property(x => x.Longitude).IsRequired(); 

     this.HasRequired(x => x.Province) 
      .WithMany(x => x.Cities) 
      .HasForeignKey(x => x.Id); 
    } 
} 

语境

public class DataContext : DbContext 
{ 
    public DataContext(): base("DataContext") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, Configuration>("DataContext")); 
    } 

    public DbSet<Province> Provinces { get; set; } 
    public DbSet<City> Cities { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new ProvinceMap()); 
     modelBuilder.Configurations.Add(new CityMap()); 
     //base.OnModelCreating(modelBuilder); 
    } 
} 

当我在Nuget包控制台上运行'update-database'命令时,出现错误:

连接“City_Province”中元素角色“City_Province_Source”中的无效重复数。由于从属角色是指关键属性,因此多重属性依赖角色的上限必须等于“1”。

+0

我读他们,但我的情况是不同的,不像其他。我尝试过提供的解决方案,但结果是一样的。 – iOne

回答

4

逻辑上,您试图定义一对多的关系。因为City不能在很多Provinces,并且一个Province可以有很多Cities

在这种情况下,您不一定需要在映射中指定HasRequiredWithMany

CityMap

this.HasRequired(x => x.Province) 
     .WithMany(x => x.Cities) 
     .HasForeignKey(x => x.Id); 

ICollection<City>Province表中删除下面的代码,并在City表中的属性类型的Province足以建立关系。

输出将是这样的。

enter image description here