VS 2012 / .NET 4.5、EF 5、および古いVS 2012 /.NET4プロジェクトからインポート/オープンされたソリューションを使用しています。edmx(自己追跡エンティティ付き)は元のプロジェクトのデータベースから生成されました。MVCではなくASP.NET Webフォームを使用して、モデルにデータ検証を追加しようとしています。MVCはこのプロジェクトのオプションではありません。
私はこのアプローチを試しましたが、数日間グーグルでさまざまな情報をつなぎ合わせました。
MetadataTypeを使用してedmxモデルを拡張しようとしましたが、機能していません。外観は次のとおりです。
//generated by VS 2010
namespace DataAccess.Model
{
[DataContract(IsReference = true)]
public partial class NoBilling: IObjectWithChangeTracker, INotifyPropertyChanged
{
//...and so on...all generated by Visual Studio
}
}
...拡張:
namespace DataAccess.Model
{
[MetadataType(typeof(DataAccess.Model.NoBillingMetadata))]
public partial class NoBilling {}
public partial class NoBillingMetadata
{
[Required, StringLength(50)]
public string Company
{
get;
set;
}
[Required, MaxLength(50)]
public string EmailDomain
{
get;
set;
}
}
}
... Webフォーム:
protected void SaveButton_Click(object sender, EventArgs e)
{
//assign to entity
NoBilling nb = new NoBilling();
nb.Zip = "10001";
//save
try
{
NoBillingProxy nbPx = new NoBillingProxy();
nbPx.Save(nb);
}
catch (Exception exp)
{
//data validation
if (ModelState.IsValid)
{
//always tests true, no values in ModelState collection
}
throw;
}
}
私はここでいくつかのことが欠けていることを知っていますが、物事を一緒に掘り起こし、考え続けるための無制限の時間はありません。このModelStateクラスの内部、呼び出し方法、トリガー方法などがわかりません。実際にデータをバインドしていないため、機能しないと思いますか?エンティティを常にコントロールにバインドするとは限らないので、バインドなしで「IsValid」状態を変更する方法はありますか?
これは私が試したものの束を得るために使用した記事です:
http://msdn.microsoft.com/en-us/vs11trainingcourse_aspnetwebforms45_topic3.aspx
どんな助けでもいただければ幸いです。