3

Entity Framework 4.1 code first既存のデータベースに接続するために使用しています。私が最初に使用しているテーブルは と呼ばれBankます。Bank classドメインモデルとしても持っています。これは、クラスとテーブルをどのようにマッピングしたかです。

public class HbfContext : DbContext
{
     public DbSet<Bank> Banks { get; set; }

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
          modelBuilder.Entity<Bank>().ToTable("Bank");
     }
}

マイ バンク テーブル:

BankID INT
BankName VARCHAR(50)

私の Bank クラスは次のようになります。

public class Bank
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
}

すべての銀行を返却したいときに問題が発生しています。以下から返された SQL ステートメント:

return db.Banks
     .OrderBy(x => x.Name);

は:

SELECT
     [Extent1].[Id] AS [Id],
     [Extent1].[Name] AS [Name],
     [Extent1].[IsActive] AS [IsActive]
FROM
     [dbo].[Bank] AS [Extent1]
ORDER BY
     [Extent1].[Name] ASC

テーブルに Id、Name、および IsActive 列がないため、これは機能しません。これを修正するにはどうすればよいですか? EF は BankId を Id に、BankName を Name に自動的にマップしますか?

4

3 に答える 3

5

IsActiveプロパティを無視し、他のプロパティをマップするように EF に指示する必要があります。データ注釈が気に入らない場合は、流暢な API でこれを行うことができます。

modelBuilder.Entity<Bank>().Ignore(b => b.IsActive);
modelBuilder.Entity<Bank>().Property(b => b.Id).HasColumnName("BankID");
modelBuilder.Entity<Bank>().Property(b => b.Name).HasColumnName("BankName");
于 2012-01-13T10:52:41.167 に答える
2

次の属性を IsActive プロパティに追加してみて、役立つかどうかを確認してください

[NotMapped]

アップデート

流暢な API の代わりに、IMO の把握と使用が容易なデータ注釈を使用する

まず、コンテキスト クラスから OnModelCreating 関数を削除します。

次に、このようにモデルを定義します

[Table("Bank")]
public class Bank
{
    [key]
    public int Id { get; set; }
    [Column("BankName")]
    public string Name { get; set; }
    [NotMapped]
    public bool IsActive { get; set; }
}

これは期待どおりに動作します

于 2012-01-13T10:42:05.567 に答える
0

System.ComponentModel.DataAnnotations を使用してプロパティ名をマッピングし、既存のテーブルのものと一致させることができます。

    [Column("BankID")]
    [Required]
    public string Id
        {
        get;
        set;
        }
于 2012-01-13T10:45:04.263 に答える