实体框架不能将单个属性标记为已修改

时间:2017-09-24 20:25:01

标签: c# entity-framework

我正在使用Entity Framework 6,我想要做的是通过主键获取条目,并仅通过Entity Framework更新条目中的一个属性。

我的代码如下所示:

    private static void UpdateByEntry()
    {
        using (var context = new EntityFrameworkTestDBContext())
        {
            var request = new Request
            {
                requestId = 1
            };

            var entry = context.Entry(request);

            entry.Property(x => x.updateDate).IsModified = true;
            entry.Property(x => x.updateDate).OriginalValue = DateTime.Now;

            Console.WriteLine("state of updateDate {0}", entry.Property(x => x.updateDate).IsModified);
            Console.WriteLine("state of entry {0}", entry.State);
            context.SaveChanges();
        }
    }

该计划的结果是:

state of updateDate False
state of entry Detached

并且updateDate后列context.saveChanges()未更新。

我在此页面https://msdn.microsoft.com/en-us/library/jj592677(v=vs.113).aspx检查了msdn。他们的示例代码如下所示,我看不出任何差异。

using (var context = new BloggingContext()) 
{ 
    var blog = context.Blogs.Find(1); 

    context.Entry(blog).Property(u => u.Name).IsModified = true; 

    // Use a string for the property name 
    context.Entry(blog).Property("Name").IsModified = true; 
}

据说

  

将属性标记为已修改会强制在调用SaveChanges时将更新发送到属性的数据库,即使该属性的当前值与其原始值相同也是如此。

但是我标记为已修改且属性未在数据库中更新。

我的问题是:即使我已将其更改为isModfified,为什么属性updateDate的{​​{1}}为false。

如何只更新条目中的一个属性?

提前致谢

0 个答案:

没有答案