我有一个标准的更新通过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。
我假设这就是为什么没有持续改变的原因是不是???
简单地说,没有为这一类的任何部分生成可扩展性方法定义。如果这是我的问题的原因,数据库中的是什么导致它不能正确自动生成?
感谢〜
答案 0 :(得分:2)
我也在MSDN上发布了这个问题:MSDN Linq to Sql如果你想看到回复。但我发现了代码无法生成的部分原因。
以下是我的MSDN回复中的一篇文章:
我创建了一个没有主键的小测试表,并将其添加到设计器中,并确定它没有为该实例生成任何可扩展性方法。
然后,我在同一个表中添加了一个主键,并将其重新添加到设计器中,确保生成了所有可扩展性方法和更改跟踪事件。
我现在的问题是为什么必须有一个主键来自动生成这个东西?
答案 1 :(得分:0)
好的,回答我自己的问题“我现在的问题是为什么必须有一个主键来自动生成这些东西?”我在Joe Joseph C. Rattz,Jr。
撰写的Pro LINQ一书中找到了它我正在阅读如何处理视图与表格,他说:
“因为为视图生成的实体类不包含映射为主键的实体类属性,所以它们是只读的。如果您认为没有主键,DataContext没有有效的方法来提供身份跟踪,这有道理。“
神秘和问题解决了。