Linq To Entities插入多个到多个但只有唯一值

时间:2013-12-08 19:28:23

标签: c# linq linq-to-entities

假设我有两个实体。文章和类别。以下示例: -

public class Article
{
    public int Id { get; set; }
    public DateTime DatePublished { get; set; }
    public DateTime? DateEdited { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public List<Category> Categories { get; set; }
}

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Article> Articles { get; set; }
}

两者之间存在多对多关系,因此ArticleCategory联结表也会发挥作用。如果我然后创建一个新的文章对象,请说: -

var article1 = new Article{Content = "Article 1", Categories = new List<Categories>{new Category{Name = "Random Category"}}

然后我将其保存到数据库然后我创建另一个文章对象与“随机类别”的类别名称完全相同,然后我的类别表包含两个“随机类别”条目,当我只想要唯一的类别名称存储的值。所以我的问题是,使用LINQ to Entities,我将如何实现这一点,特别是记住最佳实践。我假设我将使用Any运算符与类别表进行比较,但如果找到匹配项,那么如何在联结表中正确链接名称以引用现有名称。我一直在拖网搜索谷歌但是很难找到任何有价值的话题。我有自己的想法如何处理这个问题,但重要的是我切掉了绒毛并直接了解细节,所以我可以确保我第一次就做好了。先感谢您。

1 个答案:

答案 0 :(得分:0)

一种方法是创建一个存储过程,它接受所有参数并在SQL端按名称查找类别。我假设你不想这样做。

我知道使用EF执行此操作的唯一方法是获取Category实体的实例并手动分配它。这将需要两个查询,一个用于获取实体,另一个用于插入新实体。

var category = db.Categories.FirstOrDefault(c => c.Name == categoryName) 
               ?? new Category { Name = categoryName };
var article = new Article 
              { 
                Content = content,
                Categories = { category }
              };