簡體   English   中英

實體框架:更新影響對象

[英]Entity Framework : Update affecting Object

我遇到了EF Update方法的問題。

我有一個包含mutliple信息和其他復雜對象的對象例如,當我調試我的object.otherObject包含數據時。

然后我用以下行更新它:

_dbContext.Update(object);

問題是在更新調用之后,我的object.otherObject失去了它的值並變為null。

當嘗試使用不同的操作(用戶界面操作)和相同的對象(不同的值)時,我不會遇到該問題。

根據我對EF更新的理解,它應該將對象標記為已修改但保持完整。

編輯:

我的映射文件是:

internal class ObjectConfiguration: EntityTypeConfiguration<Object>
{
    public ObjectConfiguration()
    {
        ToTable("TABLE_NAME", Properties.Settings.Default.DBSchema);
        HasKey(s => s.Id);

        Property(s => s.Id).HasColumnName("COLUMNNAME");
    }
}

編輯2:

_dbContext是根據EF 5存儲庫和工作單元格構建的自定義對象:

https://docs.microsoft.com/fr-fr/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-的工作圖案,在安-ASP凈MVC應用程序

像這樣:

public class UserManager : IDisposable
{        
    private readonly IRepository _dbContext;
}

public interface IRepository
{
    TEntity Update<TEntity>(TEntity entity) where TEntity : class;
}

編輯3:

通過Attach函數時,對象實際上會清空其值:

public TEntity Update<TEntity>(TEntity entity) where TEntity : class
    {
        try
        {
            TEntity attachedEntity = Set<TEntity>().Attach(entity);
            var entry = Entry(entity);
            entry.State = System.Data.EntityState.Modified;
        }
        catch(Exception e)
        {

        }
        return entity;
    }

我不知道你的映射是怎樣的,但你可以使用這樣的東西

public class Example
{
    //ohter properties

    [Column("id_reference")
    public int IdReference { get; set; }

    [ForeignKey("IdReference ")]
    public virtual Reference ReferenceObj { get; set; }
}

在此示例中,僅映射IdReference屬性並將ReferenceObj屬性設置為IdReference,使用您必須在加載此屬性時指定的虛擬修飾符,為此執行此操作,在查詢中使用.Include(“ReferenceObj”)(示例dbContext .Examples.Where(x => x.Id> 0).Include(“ReferenceObj”)。這可以適用於您的情況,因為只映射了IdReference屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM