实体框架,将表添加到现有上下文

时间:2017-04-17 18:51:24

标签: c# asp.net-mvc entity-framework

在按照将现有表映射到模型的步骤之后,我意识到该表有一些依赖关系。

在过去的三次帮助中,我只是将整个DBContext下载并重新开始。

我想更新我的上下文以容纳另一个与当前表相关的表。

我目前的背景是:

public partial class CompanyContext : DbContext
{
    public CompanyContext() : base("name=CompanyContext")
    {
    }

    public virtual DbSet<company> companies { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<company>()
            .Property(e => e.name)
            .IsUnicode(false);

        modelBuilder.Entity<company>()
            .Property(e => e.symbol)
            .IsUnicode(false);

        modelBuilder.Entity<company>()
            .Property(e => e.address)
            .IsUnicode(false);

        modelBuilder.Entity<company>()
            .Property(e => e.zipcode)
            .IsFixedLength()
            .IsUnicode(false);

        modelBuilder.Entity<company>()
            .Property(e => e.cnpj)
            .IsFixedLength()
            .IsUnicode(false);
    }
}

公司的记录id_city甚至没有出现在DbContext中。但它在模型中存在:

[Table("company")]
public partial class company
{
    public int id { get; set; }

    [Required]
    [StringLength(70)]
    public string name { get; set; }

    [StringLength(10)]
    public string symbol { get; set; }

    [StringLength(80)]
    public string address { get; set; }

    [StringLength(8)]
    public string zipcode { get; set; }

    public int id_city { get; set; }

    public int id_segment { get; set; }

    [StringLength(14)]
    public string cnpj { get; set; }

    [Column(TypeName = "date")]
    public DateTime? open_date { get; set; }
}

我想将表cities添加到此上下文中,我该怎么办?有没有帮助它的巫师?

我认为这可能只是添加:

public virtual DbSet<city> cities { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<city>()
        .Property(e => e.name)
        .IsUnicode(false);
}

但它不起作用。

1 个答案:

答案 0 :(得分:1)

添加

等属性
public virtual DbSet<company> companies { get; set; }

上下文告诉EF你有一个表将保存company类型的记录。这一行就足够了,表格将使用标准映射,因此表格名称为companies

你需要为城市做同样的事情。

public virtual DbSet<city> cities { get; set; }

如果要在数据库中建立关系并删除City字段,还需要将虚拟属性id_city添加到公司类。如果您希望在company类上明确公开相关城市的ID,则必须使用EF遵循的命名约定,即将其命名为cityId或为其添加流畅的映射。