linq2sql如何处理只有FK的表?

时间:2009-11-19 15:29:08

标签: linq-to-sql submitchanges operator-precedence

我有一个映射表,如:

Article_to_Categories

条款ArticleID 类别ID

如何使用linq2sql插入此表?

2 个答案:

答案 0 :(得分:2)

如果Article和Category表中存在相应的行,则这应与标准插入没有区别。

另一方面,如果这些表为空,那么在执行SubmitChanges之前,您需要在这些表中插入行。

Linq-to-Sql将为您管理优先级。

总而言之,我建议您只是尝试在Article_to_Categories表中插入行,看看会发生什么。


编辑:如果不了解如何在Linq-to-Sql中插入行,请考虑网络上的示例:

答案 1 :(得分:0)

根据我的经验,我在像这样的关联表中插入记录时遇到了类似的问题。对我有用的是尊重外键关系并添加对象而不仅仅是外键ID。

例如,这对我不起作用:

var newRec = new Article_To_Categories
{
    Article_ID = 1,
    Category_ID = 2
};

DataContext.Article_To_Categories.InsertOnSubmit(newRec);
DataContext.SubmitChanges();

对我有用的是:

var newRec = new Article_To_Categories
{
    Article = DataContext.Articles.Where(a => a.Article_ID == 1).SingleOrDefault(),
    Category = DataContext.Articles.Where(a => a.Category_ID == 2).SingleOrDefault()
};

DataContext.Article_To_Categories.InsertOnSubmit(newRec);
DataContext.SubmitChanges();

根据我的研究,我可以根据我的研究得出,如果我添加对象而不是ID,则会使用相关记录的内容正确更新生成的Article_To_Categories对象。更新过程的一部分是不应重新插入相关记录的通知。如果您只是使用ID更新新记录,我不相信LINQ-to-SQL会自动从Article和Category表中检索记录,这意味着那些相关记录将受到任何现有验证,无论是否来自对象或数据库。