【问题标题】:Entity Framework: Set back to default value实体框架:设置回默认值
【发布时间】:2009-10-25 07:37:45
【问题描述】:

我正在尝试使用存根更新实体。这适用于更改记录,除非我尝试将值设置回该列的默认值。例如:如果默认值为 0,我可以更改除零以外的任何值,但如果我尝试将其设置回零,则不会保存更改。这是我正在使用的代码:

var package = new Package() {
    PackageID = 4
};
...
public static void EditPackage(Package package) {
    using(var context = new ShopEntities()) {
        context.Packages.MergeOption = MergeOption.NoTracking;
        var existing = new Package() {
            PackageID = package.PackageID
        };
        context.AttachTo("Packages", existing);
        context.ApplyPropertyChanges("ShopEntities.Packages", package);
        context.AcceptAllChanges(); // doesn't make a difference
        System.Diagnostics.Debug.WriteLine((package.DateSent.HasValue ? package.DateSent.Value.ToString("D") : "none") + "\t\t" + package.IsReceived);
        context.SaveChanges();
    }
}

在上面的示例中,DateSent 的默认值为 null(它是 DateTime?),我也可以将其设置为 null 以外的任何值,并且调试行确认设置了正确的属性,它们只是没有保存.我想我一定错过了什么。

感谢您的帮助。

【问题讨论】:

    标签: c# asp.net entity-framework orm


    【解决方案1】:

    原来我需要做的是手动将新项目中的每个属性标记为已修改。

    /// <summary>
    /// Sets all properties on an object to modified.
    /// </summary>
    /// <param name="context">The context.</param>
    /// <param name="entity">The entity.</param>
    private static void SetAllPropertiesModified(ObjectContext context, object entity) {
        var stateEntry = context.ObjectStateManager.GetObjectStateEntry(entity);
        // Retrieve all the property names of the entity
        var propertyNames = stateEntry.CurrentValues.DataRecordInfo.FieldMetadata.Select(fm => fm.FieldType.Name);
        foreach(var propertyName in propertyNames) {// Set each property as modified
            stateEntry.SetModifiedProperty(propertyName);
        }
    }
    

    【讨论】:

      【解决方案2】:

      您正在创建一个新包(具有现有包的 ID),您称之为“现有”。然后,您将其附加为现有包。你应该从数据库中加载这个包,然后附加它。

      【讨论】:

      猜你喜欢
      • 2012-05-12
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多