实体的嵌套属性从未保存到数据库(EF6)

时间:2014-05-07 16:37:22

标签: c# entity-framework

我目前在实体框架中遇到一些问题,在更新属性时没有将实体的导航属性保存到数据库。我有一个广告客户类,其中包含对GoogleAnalyticsProfile的引用,这两个类都是存储在数据库中的实体,并且都可以通过DataContext访问。

    public class Advertiser
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public int ConcernId { get; set; }
        public Concern Concern { get; set; }
        public List<Campaign> Campaigns { get; set; }

        public GoogleAnalyticsProfile GoogleAnalyticsProfile { get; set; }
        public DashboardConfiguration DashboardConfiguration { get; set; }

        public Advertiser()
        {
            GoogleAnalyticsProfile = new GoogleAnalyticsProfile();
            DashboardConfiguration = new DashboardConfiguration();
        }
    }

在我的广告商类的模型配置中,我已将关系定义如下:

HasRequired(a => a.GoogleAnalyticsProfile);

在更新实体时,我使用以下代码:

Entry(item).State = EntityState.Modified;
context.SaveChanges();

选择广告商时,我使用.Include()来确保所有必需的属性都正确加载到Advertiser对象中,这样可行。但是,每当我尝试将实体保存回数据库时,它都会很好地更新已更改的广告商但忽略GoogleAnalyticsProfile和DashboardConfiguration属性。

昨天我很沮丧,因为我的模型从未进入数据库;但是,当我今天第一次尝试时它工作:更改的导航属性很好地推回到数据库中,后续查询返回正确的值。此时它的行为相当狡猾:有时它会保存嵌套属性,有时则不会。我将.Log属性设置为Trace.WriteLine,我确实看到它更新整个模型或仅更新广告商。

我的应用程序是用Asp.net WebApi 2.1编写的,附带了一个辅助应用程序,它作为一项服务运行,可以执行某些任务,例如下载谷歌分析数据。在测试我的Web服务时,我启动了两个应用程序。 EF是否有可能在两个应用程序之间共享数据上下文/缓存,从而阻止将配置文件写入数据库?运行的下载任务(在保持对配置文件的引用时)与更新未成功之间似乎存在关联。

由于

0 个答案:

没有答案