模型构建器添加一列更多?

时间:2016-02-14 11:48:45

标签: asp.net asp.net-mvc ef-code-first ef-model-builder

我先使用EF代码。

这是我的模型制作者

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        modelBuilder.Entity<Market>()
            .HasRequired(s => s.State)
            .WithMany()
            .HasForeignKey(s => s.StateId)
            .WillCascadeOnDelete(false);
    }

和州级:

public class State
{
    public State()
    {
        Markets = new HashSet<Market>();
    }

    [Key]
    public int StateId { get; set; }

    public string StateName { get; set; }

    // navigation property

    public virtual ICollection<Market> Markets  { get; set; }
}

和市场类:

public class Market
{
    [Key]
    public int MarketId { get; set; }

    public string MarketName { get; set; }

    public int StateId { get; set; }

    // navigation property

    public virtual State State { get; set; }

}

当然我删除了额外的代码。

问题是,当我使用此代码时,State_StateId列添加到数据库中的Market表中,当我不使用modelbuilder时,消息循环代码发生错误...(我说我删除了额外的代码),那么如果没有这个“State_StateId”额外列,我怎么能首先使用代码。

请原谅我的英文写作不好。

1 个答案:

答案 0 :(得分:0)

如果您要删除State_StateId列,请完全按照以下代码设置配置,不要让WithMany为空:

modelBuilder.Entity<Market>()
        .HasRequired(s => s.State)
        .WithMany(p => p.Markets)
        .HasForeignKey(s => s.StateId)
        .WillCascadeOnDelete(false);

或者您可以删除Fluent API配置并让EF使用默认配置约定,并为您设置所有表,主键,外键和列名。