0

モデル:

public class Status
{
    public int Id { get; set; }
}

public class Podcast
{
    public int Id { get; set; }

    public virtual Status Status { get; set; }
}

Podcast テーブルには StatusId 列があり、この列は外部キーです。この場合、次のエラー メッセージが表示されますInvalid column name 'Status_Id'.。- そのような例の記事に何度も直面しました。これが最初の質問です。OK、問題ありません。これらの列にアンダースコア文字を追加しました: Sttaus_Id など。今ではすべてうまくいっているように見えますが、次の方法でモデルを変更すると:

public class Podcast
{
    public int Id { get; set; }

    public int Status_Id { get; set; }

    public virtual Status Status { get; set; }
}

次のエラーが表示されます。Invalid column name 'Status_Id1'. なぜですか? これらの xx_id プロパティがないと、DropDownListFor ヘルパーを使用できません。

4

2 に答える 2

3

ここでの問題は、最初に DB を作成し、FK 参照用に StatusId という名前の列を作成したが、FK にデフォルト以外の列名を使用していることを EF に伝えていないことだと思います。

以下は、あなたが求めている構造を提供します(ps私はあなたの命名規則に同意します私は個人的にfk idsの_が嫌いです)

    public class MyContext : DbContext
    {
        public DbSet<Podcast> Podcasts { get; set; }
        public DbSet<Status> Status { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Podcast>().HasOptional(p => p.Status)
                .WithMany().HasForeignKey(p => p.StatusId);
            base.OnModelCreating(modelBuilder);
        }
    }

    public class Status
    {
        public int Id { get; set; }
    }

    public class Podcast
    {
        public int Id { get; set; }

        public int? StatusId { get; set; }
        public virtual Status Status { get; set; }
    }
于 2012-05-16T08:24:43.630 に答える
-1

少なくとも外部キー フィールドの規則は、テーブル名 + フィールド名であるため、あなたの場合、アンダースコアのない StatusId です。しかし、なぜそれが言うのかわかりませんinvalid column name Status_Id1

アンダースコアを削除して、もう一度やり直してください。それでもエラー メッセージが表示される場合は、結果を使用して質問を編集してください。

于 2012-05-16T08:11:26.083 に答える