【问题标题】:Entity Framework Model Property not update properly实体框架模型属性未正确更新
【发布时间】:2013-05-08 12:23:05
【问题描述】:

我有下面提到的 2 个模型。

地理位置型号:

public class GeoLocation {
        public GeoLocation() { }
        public int Id { get; set; }
        public double Latitude { get; set; }
        public double Longitude { get; set; }
    }

提供者模型:

public class Provider
    {
        public Provider()
        {
            Id = Guid.NewGuid();
            Created = DateTime.Now;
        }

        public Guid Id { get; set; }
        [Required]
        public string Name { get; set; }

        public virtual GeoLocation Location { get; set; }

    }

存储库方法:

public void SetLocation(string providerKey, GeoLocation location)
        {
            var provider = (from p in Catalog.Providers
                            where p.Key == providerKey
                            select p).Single();

            provider.Location = location;

            Catalog.SaveChanges();
}

如上所述,我需要更新 Provider Table 的 Location 对象。但是上面的代码给出了奇怪的结果。那就是当传入的 location 对象具有 Id 比如说 15。然后我需要更新该 Id进入provider tables location Id。但是在上面的代码之后它更新为16而不是15。你能告诉我为什么吗?这里的根本问题是什么?

注意:我使用的是默认 EF 约定映射。

更新:我在这里找到了问题。那是我将provider.Location = location; GeoLocation自动递增 ID 增加 1。这就是原因。那我该如何避免呢?

【问题讨论】:

    标签: .net c#-4.0 ef-code-first entity-framework-4.1


    【解决方案1】:

    您是如何获得位置的?问题是您的 EF 上下文 (Catalog) 认为该位置是要持久化的新对象(= 它生成插入到位置表中)。您必须通知目录它已经是存在的对象。

    这可能是个把戏:

    if (location.Id > 0) {
        Catalog.GeoLocations.Attach(location);
    } 
    
    provider.Location = location;
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多