無法轉換EntityEntry當前值

c# entity-framework-core

我在EF 6中使用相同的方法並且工作得很好,但使用EF核心v1.1.1的方法是拋出這樣的異常。請看一下。 在此處輸入圖像描述

     public virtual T Update(T obj)
    {
        try
        {
            if (null == obj) throw new ArgumentNullException(nameof(obj));

            _context.Set<T>().Attach(obj);

            var entry = _context.Entry(obj);

            foreach (var property in entry.OriginalValues.Properties)
            {
                var current = entry.CurrentValues.GetValue<object>(property.Name); // <-- error occurring this line. If i set the generic type to specific like int,string etc the code work for the specific type only but if i set to object won't work.
                entry.Property(property.Name).IsModified = current != null;
            }

            _context.SaveChanges();

            //Detached the current context to get changes value
            _context.Entry(obj).State = EntityState.Detached;

            return obj;
        }
        catch (Exception ex)
        {

            Console.Write(ex);
            throw;
        }
    }

一般承認的答案

使用索引器獲取屬性值而不使用強制轉換:

var current = entry.CurrentValues[property.Name];

主鍵屬性應該從foreach循環中排除。就像是:

if (property.Name == "Id") continue;

應該管用。否則你將得到InvalidOperationException

'實體類型'Foo'上的屬性'Id'是密鑰的一部分,因此無法修改或標記為已修改。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow