私はEntity Framework 4.3でコードワースト開発を行っていますが、属性注釈やその他の手段でCHECK constraintを表現することはできません。私はEF 5.0がchecking enumerationsのサポートを追加することを見ていますが、それは私がここにいるのとまったく同じではありません。チェック制約を表現することは可能ですか?
簡略化すると、すべてのPerson
オブジェクトの名前が "Bob"または "Harry"で、5,10,30歳のいずれかであることを検証したいと思います。
public class Person
{
[Required]
[Check("Bob", "Harry")] //yes, this attribute is imaginary
public string FirstName { get; set; }
[Required, Check(5, 30, 50)] //check is still imaginary
public int Age { get; set; }
}
私は事実の後にこれらの制約を追加するには、alterスクリプトを実行することができますし、私は検証を実行するために自分自身のチェック属性をロールバックすることができますが、私は実際に非列挙CHECK制約を表現するために欠けている方法がありますエンティティフレームワーク?
が、私のこれはドメイン限定の属性だということです。チェック制約があるバッキングテーブルエンティティには反映されません。たとえば、文字列のMaxLengthがテーブル構造に反映されるのと同じ方法です。 – 48klocs
私はEFに精通しているわけではありませんが、ILSpyで 'EntityFramework.dll'を開き、' System.Data.Entity.Internal.Validation.EntityValidatorBuilder'が属性の分析と何をすべきかを決定するように見えますそれら。 'RequiredAttribute'、' MaxLengthAttribute'、 'StringLengthAttribute'、' DisplayAttribute'は基本的にデータベース作成プロセスに組み込まれているように見えます。私は今日のようにEFであなたがしていることをすることが可能かどうかはわかりません。 –