这是我有史以来第一个使用Entity Framework的项目,我想忽略Insert,Update活动中的一些数据列。但是当我在视图上显示数据时,我仍然需要绑定它们。
在下图中,您可以在我的模型和表格结构中看到一些代码
在SQL Server,DateCreated中,我将它的默认值设置为'GETDATE()',并且应该在Insert和Update语句中忽略它。
同样,UserCreated和DateCreated也应该在Update操作中排除。
但是当我试图捕获发送到服务器的SQL脚本时,这些值包含在生成的SQL中,它导致我出现像DateTime溢出,Null值不被接受等错误。
SQL事件探查器中生成的SQL脚本
exec sp_executesql N'INSERT [dbo].[Events]([Title], [Detail], [StartDate], [StartTime], [EndTime], [CategoryID], [Campus], [Location], [DateCreated], [UserCreated], [DateModified], [UserModified], [state], [IsPosted])
VALUES (@0, @1, @2, @3, @4, @5, @6, NULL, @7, @8, NULL, NULL, @9, @10)
SELECT [EventID]
FROM [dbo].[Events] WHERE @@ROWCOUNT > 0 AND [EventID] = scope_identity()',
N'@0 varchar(1000),@1 varchar(4000),@2 datetime2(7),@3 time(7),@4 time(7),@5 varchar(10),@6 varchar(100),@7 datetime2(7),@8 varchar(50),@9 tinyint,@10 bit',@0='Football',
@1='Welcome to <strong>Football </strong>Match',@2='2016-01-29 00:00:00',@3='07:00:00',@4='12:00:00',@5='GIG',@6='xxxx',@7='0001-01-01 00:00:00',@8='username',@9=0,@10=0
答案 0 :(得分:2)
当插入或更新时,请忽略您不想更新或插入的字段,如下所示
[HttpPost]
public ActionResult Index(TimeSpan StartTime, TimeSpan EndTime, string CategoryID, string Campus, string Location, DateTime DateModified, string UserModified,
byte State, bool IsPosted)
{
var yourDbContext = new yourDbContext();
Events events = new Events();
events.StartTime=StartTime;
events.EndTime=EndTime;
events.CategoryID=CategoryID;
events.Campus=Campus;
events.Location =Location;
events.DateModified=DateModified;
events.UserModified=UserModified;
events.State= State;
events.IsPosted= IsPosted;
//Inserting
try
{
yourDbContext.Events.Add(events);
yourDbContext.SaveChanges();
return Json("Inserted", JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
return Json(e.ToString(), JsonRequestBehavior.AllowGet);
}
//end of inserting
//Updating
try
{
yourDbContext.Entry(events).State = EntityState.Modified;
yourDbContext.SaveChanges();
return Json("Updated", JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
return Json(e.ToString(), JsonRequestBehavior.AllowGet);
}
//End of updating
}
在视图上显示数据时,只需根据事件模型生成强类型视图
答案 1 :(得分:1)
插入强>
在DateCreated列上使用[DatabaseGenerated(DatabaseGeneratedOption.Computed)]数据注释,以使用数据库生成的默认值。
https://msdn.microsoft.com/en-us/data/jj591583.aspx#DatabaseGenerated
<强>更新强>
实体框架仅更新已修改的字段,因此只需更改UserCreated的值,它就不会更新。
答案 2 :(得分:0)
这也可以在控制器中实现。
创建强>
在create方法中,您可以设置CreatedBy和CreatedOn的值。
CreatedOn = DateTime.Now;
CreatedBy = User.Identity.Name; //In case of Windows authentication else user name can be taken from the db
ModifiedOn = null;
ModifiedBy = null;
<强>更新强>
在更新中,您可以再次设置ModifiedBy和ModifiedOn的值,并保留CreatedBy和CreatedOn,可以添加以下内容
events.ModifiedOn = DateTime.now;
events.ModifiedBy = User.Identity.Name;
db.Entry(events).State = EntityState.Modified;
db.Entry(events).Property("CreatedOn").IsModified = false;
db.Entry(events).Property("CreatedBy").IsModified = false;