asp.net动态数据网站:插入/更新记录时传递默认值
我在ASP.NET动态数据web应用程序中工作,在插入/更新记录时遇到传递默认值的问题。在我的应用程序中,所有表都有以下公共列:asp.net动态数据网站:插入/更新记录时传递默认值,asp.net,asp.net-dynamic-data,Asp.net,Asp.net Dynamic Data,我在ASP.NET动态数据web应用程序中工作,在插入/更新记录时遇到传递默认值的问题。在我的应用程序中,所有表都有以下公共列: CreatedBy(默认值:登录用户) CreatedDate(默认值:DateTime.Now) modifiedBy(默认值:登录用户) ModifiedDate(默认值:DateTime.Now) 我希望将这些列隐藏在Insert和Edit页面中,并希望默认值将自动插入相应的列中 请推荐我 谢谢 保罗参考: 为了维护数据库数据更改的历史记录,我们 需要将每
- CreatedBy(默认值:登录用户)
- CreatedDate(默认值:DateTime.Now)
- modifiedBy(默认值:登录用户)
- ModifiedDate(默认值:DateTime.Now)
Insert
和Edit
页面中,并希望默认值将自动插入相应的列中
请推荐我
谢谢
保罗参考:为了维护数据库数据更改的历史记录,我们 需要将每次插入、更新和删除记录到某种程度 “历史”表。除了捕获插入的数据, 更新或删除,我们还需要注意用户所做的 修改,以及修改的日期和时间 更多参考:
要自定义ORM实体框架,请检查以下链接:
我看到你在做简单的审计,看看我在这里的博文,希望对你有所帮助
在页面中执行此类操作从来都不是好事,最好在数据模型/层中执行。您可以使用my隐藏所有页面中的列。我最终实现的解决方案:
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);
}
我的解决方案与Paul的要求有点不同 在文件dynamicata\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;
}
[...]
}
为了编辑具有现有值的记录,我对一些DynamicATA\FieldTemplates文件进行了更改
它将在页面上显示更新后的值以供编辑,但更新后的更改不会持续!需要对编辑页面模板进行其他更改:
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;
}
}
谢谢你的快速回复。对于历史记录,我们有单独的事务表。我需要的是假设我不想在插入/编辑动态数据页面中显示一列,即使该列在DB级别不是NULL。现在,在插入/更新该实体的记录时,我想在insert/update query.Okk.中传递一些默认值。当您创建表时,请为列指定默认值,或使用指定默认值的存储过程…无法在表中指定默认值,因为createdby/modified是变量(loggedin user)。我正在使用DynamicATA,EF和DD会自动执行插入/更新作业,因此没有编写SP的范围。DD中是否有任何解决方法???检查实体框架的添加链接以获取此主题的参考。对于审核,我们使用了sqlserver 2008审核。我只是想对UI隐藏这些字段。因为createdby/CreatedDate是数据库中的必填字段,所以不可能使用scaffolding=false。最后,我通过在FormView1\u ItemInserting事件中添加这些字段/值来解决这个问题。无论如何,谢谢你提供的信息。我已经读了很多你在DD上写的文章,并且得到了很多帮助。非常感谢>>关于您正在做的事情的更透彻的解释:
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;
}
}