首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFramework码第一FluentAPI TPC

EntityFramework码第一FluentAPI TPC
EN

Stack Overflow用户
提问于 2014-02-15 18:07:52
回答 1查看 180关注 0票数 0

这里有我的域实体

代码语言:javascript
复制
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; }
}

映射

代码语言:javascript
复制
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);
    }
}

上下文

代码语言:javascript
复制
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包控制台上运行‘’命令时,我有一个错误:

连接"City_Province_Source“中的元素角色"City_Province”中的无效多重性。因为依赖角色引用了键属性,所以依赖于多重属性的角色的上界必须等于"1“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-15 18:47:52

从逻辑上讲,你试图定义一对多的关系。因为City不能出现在许多Provinces中,而一个Province可以有很多Cities

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

CityMap中删除以下代码

代码语言:javascript
复制
this.HasRequired(x => x.Province)
        .WithMany(x => x.Cities)
        .HasForeignKey(x => x.Id);

ICollection<City>表中设置Province,在City表中设置Province的属性类型,就足以建立关系。

输出将是这样的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21801530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档