2012-04-16 12 views
3

私はASP.NET Dynamic Data Webアプリケーションで作業しており、レコードの挿入/更新時にデフォルト値を渡す問題があります。私のアプリケーションでは、すべてのテーブルには、共通の列を次のようしていますasp.net動的データWebサイト:レコードの挿入/更新中にデフォルト値を渡す

  • CREATEDBY(デフォルト値:ログインしてい)
  • CreatedDateに(デフォルト値:DateTime.Now)
  • modifiedBy(デフォルト値:ログインしてい)
  • ModifiedDate(デフォルト値:DateTime.Now)

私はInsertEditページでは、これらの列の皮を維持したいとデフォルト値はAUTOMATICAを挿入されることを望みますそれぞれの列にlly。

お願いします。

おかげ ポール

答えて

0

ソリューション:

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e) 
    { 
     e.Values.Add("CreatedBy", HttpContext.Current.User.Identity.Name); 
     e.Values.Add("CreatedDate", DateTime.Now); 
    } 

protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) 
    { 
     e.OldValues.Add("ModifiedBy", null); 
     e.OldValues.Add("ModifiedDate", null); 
     e.NewValues.Add("ModifiedBy", HttpContext.Current.User.Identity.Name); 
     e.NewValues.Add("ModifiedDate", DateTime.Now); 
    } 
+0

あなたがしていることのより詳細な説明:[Entity Frameworkを使用したASP.NET Dynamic Data Webサイトへの挿入前の値の更新](http://batesits.com/tag/dynamic-data/) – ofthelit

0

参考:我々はすべての挿入、更新を記録する必要が データベースのデータへの変更の履歴を維持し、いくつかに削除するために
Maintaining a Log of Database Changes - Part 1

並べ替え: 「履歴」テーブル。挿入されたデータをキャプチャすることに加えて、 が更新されたか、または削除された場合、変更した日付と時刻だけでなく、ユーザーが の変更を行ったことも記録する必要があります。

もっと参考:

Best design for a changelog/auditing database table?
Log changes to database table with trigger

カスタマイズするにはORM Entity Frameworkのチェックは、以下のリンク:

How to use Default column value from DataBase in Entity Framework?
How to: Execute Business Logic When Saving Changes

+0

ありがとうございました。履歴については、個別の取引テーブルがあります。私が必要とするのは、たとえ列がDBレベルでない場合でも、動的データページを挿入/編集する列を表示したくないと仮定します。今、そのエンティティのレコードを挿入/更新しながら、私は挿入/更新クエリにいくつかのデフォルト値を渡したいと思います。 – Paul

+0

Okk ..テーブルを作成しているときに列のデフォルト値を指定するか、デフォルト値を指定してストアドプロシージャを使用します。 –

+0

..問題を解決するのに役立たない>>> – Paul

2

私はあなたが簡単にやっているのを見ている私のブログの投稿を見てここでBasic Auditing for Dynamic Data with Entity Framework 4.x希望を助けてください。

ページ内でこのようなことを行うことは決してうまくありません。データモデル/レイヤーで行うのが最善です。私のA New Way To Do Column Generation in Dynamic Data ...を使用すると、すべてのページの列を非表示にすることができます。私は最終的に実装した

+0

監査では、sqlserver 2008監査を使用しています。私はUIからこれらのフィールドを隠したいと思っていました。 createdby/CreatedDateはscaffolding = falseを使用するDBの必須フィールドではありませんでした。最後に、FormView1_ItemInsertingイベントにこれらのフィールド/値を追加して解決しました。とにかく情報をありがとう。私はDDであなたが書いた記事の数を読んで、多くの助けを得ました。ありがとうございます>> – Paul

0

私のソリューションは、パウロの要件とは少し異なっています。

ファイルDynamicData \ PageTemplates \ Insert.aspx.cs共有フィールドを持つテーブルに新しいレコードのデフォルトを表示するように編集しました。ユーザーはまだ他のものを挿入することができます。既存の値を持つ編集レコードの場合

public partial class Insert : System.Web.UI.Page 
{ 
    protected MetaTable table; 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     table = DynamicDataRouteHandler.GetRequestMetaTable(Context); 
     var values = table.GetColumnValuesFromRoute(Context); 

     // set default values for meta data of new records across all tables 
     // unknown values will be skipped 
     values.Add("creationDate", DateTime.Now); 
     values.Add("modificationDate", DateTime.Now); 
     values.Add("modificationUser", HttpContext.Current.User.Identity.Name.Substring(
      HttpContext.Current.User.Identity.Name.IndexOf("\\") + 1)); 

     FormView1.SetMetaTable(table, values); 
     DetailsDataSource.EntityTypeFilter = table.EntityType.Name; 
    } 
    [...] 
} 

は、私はいくつかのDynamicData \ FieldTemplatesファイルに変更を加えました。

public partial class Text_EditField : System.Web.DynamicData.FieldTemplateUserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // ... 

     // show current user as value for the modification user upon editing records 
     if (Column.Name == "modificationUser") 
     { 
      FieldValue = Page.User.Identity.Name.Substring(Page.User.Identity.Name.IndexOf("\\") + 1); 
     } 
    } 
    [...] 
} 

編集時に更新された値がページに表示されますが、更新後も変更が維持されません。編集ページのテンプレートをさらに変更する必要があります。

protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) 
    { 
     // make sure a meta data update is always triggered by setting a different old value 
     // required for the edit components 
     if (e.OldValues.Contains("modificationUser")) 
     { 
      e.OldValues["modificationUser"] = string.Empty; 
      e.OldValues["modificationDate"] = DateTime.MinValue; 
     } 
    } 
関連する問題