我有一个服务对象 Update
public bool Update(object original, object modified)
{
var originalClient = (Client)original;
var modifiedClient = (Client)modified;
_context.Clients.Update(originalClient); //<-- throws the error
_context.SaveChanges();
//Variance checking and logging of changes between the modified and original
}
Run Code Online (Sandbox Code Playgroud)
这是我从以下方法调用此方法的地方:
public IActionResult Update(DetailViewModel vm)
{
var originalClient = (Client)_service.GetAsNoTracking(vm.ClientId);
var modifiedClient = (Client)_service.Fetch(vm.ClientId.ToString());
// Changing the modifiedClient here
_service.Update(originalClient, modifiedClient);
}
Run Code Online (Sandbox Code Playgroud)
这是GetAsNotTracking方法:
public Client GetAsNoTracking(long id)
{
return GetClientQueryableObject(id).AsNoTracking().FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
Fetch 方法:
public object Fetch(string id)
{
long fetchId;
long.TryParse(id, out fetchId); …Run Code Online (Sandbox Code Playgroud) 我有一个从现有SQL Server数据库生成的Entity Framework 6 Code First模型.数据库正在使用SQL Server更改跟踪,因此对于从EF生成的所有数据操作操作,我想设置更改跟踪上下文,以区别于其他外部进程所做的更改.这通常在T-SQL中完成
WITH CHANGE_TRACKING_CONTEXT (@source_id) UPDATE <table>...
我唯一能想到的是将上面的sql子句添加到EF生成的SQL中.虽然看来,想要修改ORM生成的SQL本身就值得怀疑.尽管如此,即使我想,我也不知道它可以在哪里完成.EF Command Interception可以达到目的吗?
问题是关于SQL Server的更改跟踪功能与EF一起使用(不是EF的更改跟踪).就EF而言,问题只是以编程方式修改EF生成的SQL
在我们的应用程序的每个SQL表中,我们都有"CreatedDate"和"ModifiedDate"列.我们正在使用DB第一种方法.当我保存数据时,我希望自动填充这两列.一种方法是getdate()在SQL表列本身上使用默认值.所以这将部分地解决问题.这意味着当实体是新的时,它将设置CreatedDate和ModifiedDate.但是,当我编辑/更新实体时,我只想ModifiedDate更新.
使用Code第一种方法有很多文章在做这件事.但我们正在使用DB第一种方法.
我有什么选择?
我正在学习ASP.NET核心MVC,我的模型是
namespace Joukyuu.Models
{
public class Passage
{
public int PassageId { get; set; }
public string Contents { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
该Passage表用于保存我写的段落.
Create视图只有一个字段Contents来输入一个段落. CreatedDate并且ModifiedDate必须由服务器自动设置为相等(使用UTC格式).
Edit视图只有一个字段Contents来编辑一个段落.ModifiedDate必须由服务器自动设置.
根据上述场景,我必须将哪些属性附加到CreatedDate和ModifiedDate属性以使它们由服务器自动填充?