簡體   English   中英

EntityFramework代碼第一個FluentAPI TPC

[英]EntityFramework Code First 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”。

從邏輯上講,您正在嘗試定義一對多關系。 因為City不能在許多Provinces ,一個Province可以有許多Cities

在這種情況下,您不必在映射中指定HasRequiredWithMany

CityMap刪除以下代碼

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

Province表中具有ICollection<City> ,在City表中具有Province的屬性類型足以建立關系。

輸出將是這樣。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM