【问题标题】:Entity Framework won't add object实体框架不会添加对象
【发布时间】:2011-11-18 06:31:52
【问题描述】:

在下面的代码中,我有一个 WCF 服务,其中包含一个向影片添加标签的方法。在数据库中,一共有三张表:一张用于标签;一部用于电影;一种用于通过关系连接电影和标签。

由于某种原因,以下代码,特别是 if..then..else 语句的第一段,没有在表中添加新标签。它没有抛出任何异常,只是似乎没有添加任何东西

    public void AddFilmTag(string tagWordIn, int filmIdIn)
    {
        if (context.Tags.SingleOrDefault(x => x.tagWord == tagWordIn) == null)
        {
            Tag t = new Tag();
            t.tagWord = tagWordIn;

            context.Tags.AddObject(t);
            context.Films.SingleOrDefault(x => x.filmId == filmIdIn).Tags.Add(t);
        }
        else
        {
            Tag t = context.Tags.SingleOrDefault(x => x.tagWord == tagWordIn);
            context.Films.SingleOrDefault(x => x.filmId == filmIdIn).Tags.Add(t);
        }
    }

对此的任何帮助将不胜感激。

【问题讨论】:

  • 你确定你进入 IF 而不是 ELSE?

标签: c# wcf entity-framework-4


【解决方案1】:

你在任何时候都不会打电话给context.SaveChanges()

没有那个调用,什么都不会写入数据库。

【讨论】:

  • 在ef(ObjectContext)中方法调用SaveChanges()SubmitChanges()是Linq2Sql方法(DataContext)。
【解决方案2】:

您需要将更改保存回数据库

例如

context.SaveChanges()

还有

虽然这样会起作用

if (context.Tags.SingleOrDefault(x => x.tagWord == tagWordIn) == null)

这样做在语义上更正确

if (!context.Tags.Any(x => x.tagWord == tagWordIn))

【讨论】:

  • 感谢有关语义的信息,我想不出更好的编码方式
  • 进一步考虑它会更好地翻转 if 和 else 子句然后你可以做if (context.Tags.Any(x => x.tagWord == tagWordIn))
  • 我会这样做,但是标签是在电影之间共享的,因此用户可以通过标签而不是类别来搜索 silverlight 应用程序,以及标签电影本身。它在实践中行不通,但它只是我正在做的一个学习 MVVM 的项目。
  • 翻转 if 和 else 并反转检查不会影响在相同情况下运行相同代码的逻辑。
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多