エンティティフレームワークのコードの最初の複数化が機能しないのはなぜですか?

私はEntity Framework Code Firstを使用しています。通常は問題ありませんが、データベースではSQL Serverデータベースでテーブルが見つからないというエラーが発生しています。私のクラスは次のようになります:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

public class CustomApp_User
{
    [Key]
    public int UserID { get; set; }
    [MaxLength(50)]
    public string Username { get; set; }
    [MaxLength(250)]
    public string Email { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateModified { get; set; }

}

データベースには、上記の "CustomApp_Users"というテーブルがあります。最後に "s"があることに注意してください。

そして、私は持っている:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

public class CustomAppDB : DbContext
{
    public DbSet CustomApp_Users { get; set; }
}

私はEF codefirstが複数形になることを期待していたので、データベースで "CustomApp_Users"が見つかるようになりました。しかし、代わりに私はエラーが発生します:

オブジェクト名 'dbo.CustomApp_User'が無効です。

テーブル名を複数形にしていないようです。なぜ私は理解できません。このデータベースと異なる点は、主キーが通常の規約に従わないため、[Key]注釈を使用することです。

クラスの[Table]アノテーションを使用すると、次のように動作します: [Table( "CustomApp_Users")]

しかし、私は多元化がなぜ私が思ったように動作していないのかを知りたい。

1

1 答え

これは、 PluralizationService EFでは、それを複数形にすることはできません。 "CustomApp_User"を渡すと、同じ文字列が返されます。残念ながら、このサービスをカスタマイズすることはできません。したがって、明示的にテーブル名を設定する必要があります。

2
追加された
ありがとうございました。 PluralizationServiceを呼び出すことはできませんでした。テーブル名にアンダースコアが含まれていれば、複数形にはならないようです。アンダースコアを取り出すと、それは複数形になります。なぜ彼らはそれをしたのだろう?
追加された 著者 dtc,
私はこれまで聞いたことがない。私はおそらく、私は "CustomAppUser"という名前を "CustomAppUser"に変更して、すべてを一貫性を持たせ、一緒に働かせるべきだと思っています。テーブル名を明示的に定義するのと同じように、私の多元化の問題も解決します。この名前がどこかの行の下で混乱を引き起こすかどうかはあまり確かではありません。
追加された 著者 dtc,
@metanaitoクラス名に _ マークを使うのは良い習慣ではないかもしれないからです。
追加された 著者 Eranga,