Linq to Sql Update不会持久化到数据库

时间:2010-01-08 00:48:30

标签: linq-to-sql

我有一个标准的更新通过linq到sql发生但数据不会持久存储到数据库。

我通过.dbml文件设计器使用自动生成的类。

更新声明如下:

public static void UpdateEmailsInWorkingTable(Guid emailGuid, string modifiedEmail)
{
        using (EmailDBDataContext DBContext = new EmailDBDataContext())
        {
            EmailAddress_Update EAUpdated = (from e in DBContext.EmailAddress_Updates
                                             where e.EmailGuid == emailGuid
                                             select e).SingleOrDefault();

            EAUpdated.EmailAddress = modifiedEmail;
            EAUpdated.IsValid = 'Y';
            EAUpdated.UpdateFlag = true;
            EAUpdated.LastChangedDtTm = DateTime.Now;
            try
            {
                DBContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
            }
            catch (ChangeConflictException ex)
            {
                // do stuff here
            }
        } 
}

我浏览了自动生成的DataContext类,唯一明显的区别是有问题的表EmailAddress_Update没有实现其他自动生成的实体所做的两个接口INotifyPropertyChanging和INotifyPropertyChanged。

我假设这就是为什么没有持续改变的原因是不是???

简单地说,没有为这一类的任何部分生成可扩展性方法定义。如果这是我的问题的原因,数据库中的是什么导致它不能正确自动生成?

感谢〜

2 个答案:

答案 0 :(得分:2)

我也在MSDN上发布了这个问题:MSDN Linq to Sql如果你想看到回复。但我发现了代码无法生成的部分原因。

以下是我的MSDN回复中的一篇文章:

我创建了一个没有主键的小测试表,并将其添加到设计器中,并确定它没有为该实例生成任何可扩展性方法。

然后,我在同一个表中添加了一个主键,并将其重新添加到设计器中,确保生成了所有可扩展性方法和更改跟踪事件。

我现在的问题是为什么必须有一个主键来自动生成这个东西?

答案 1 :(得分:0)

好的,回答我自己的问题“我现在的问题是为什么必须有一个主键来自动生成这些东西?”我在Joe Joseph C. Rattz,Jr。

撰写的Pro LINQ一书中找到了它

我正在阅读如何处理视图与表格,他说:

“因为为视图生成的实体类不包含映射为主键的实体类属性,所以它们是只读的。如果您认为没有主键,DataContext没有有效的方法来提供身份跟踪,这有道理。“

神秘和问题解决了。