1

最初に 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」余分な列を使用せずに、最初にコードを使用します。

下手な英作文ですみません。

4

1 に答える 1

0

列を削除する場合はState_StateId 、以下のコードのように構成を完全に設定し、WithMany空にしないでください。

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

または、Fluent API 構成を削除して、EF に既定の構成規則を使用させ、すべてのテーブル、主キー、外部キー、および列名を設定することもできます。

于 2016-02-14T16:16:40.953 に答える