3

私は最初にデータベースでEF4.1を使用しています。

表の例:

CREATE TABLE dbo.Foo(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    Created datetime not null default(getdate()),
    Title varchar(80) not null

PRIMARY KEY CLUSTERED ([ID] ASC)
)

EFは、nullable=falseとして3列すべてのモデルを正しくロードします。

コード生成アイテム「ADO.NETDbContextGenerator」からの出力:

 public partial class Foo
 {
    public int ID { get; set; }
    public System.DateTime Created { get; set; }
    public string Title { get; set; }
 }

FooControllerMVC3では、dbコンテキストとfooモデルを介してviaを生成します。/ Foo / Createを起動し、空白のフォームで[Create]をクリックすると、[Created]フィールドに検証エラーが表示されますが、[Title]には表示されません。

「作成された」日付のみを入力すると、例外が発生します。

1つ以上のエンティティの検証に失敗しました。詳細については、「EntityValidationErrors」プロパティを参照してください

例外は「タイトルフィールドは必須」です。

なぜ一方の列ではうまく機能するのに、もう一方の列ではうまく機能しないのかわかりません。私の最初の修正は単に注釈を追加することでしたが、クラスコードはEFによって自動生成されます。

動作していると思われる唯一の修正は、部分的なメタデータクラスを使用することです。ASP.NETMVC3-EFデータベースファースト(ObjectConext、DbContext)によるデータ注釈

必要に応じて[必須]タグを追加できますが、これは不要です。これはEFのバグですか、それとも何かが足りないだけですか?

4

1 に答える 1

1

これはバグではありません。EFは単にこれらの属性を追加しません。私の知る限り、データベースファーストのアプローチ(デザイナーによって生成されたエンティティクラス)は検証さえ実行しません。あなたが参照しているリンクはあなたの問題の有効な解決策です。実際のメタデータを含むバディクラスの原則は、部分クラスの既存のプロパティに属性を追加できないという事実のために導入されました。

コードファーストアプローチには、アノテーションを検証するための組み込み機能があります。「EntityFramework4.1検証」を参照してください。database-firstを使用する場合の別の解決策は、これらの属性T4TemplatesとEntityFrameworkを適用するカスタムコードジェネレーターを作成することです。

于 2011-07-08T09:41:09.013 に答える