假设我有两个实体。文章和类别。以下示例: -
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运算符与类别表进行比较,但如果找到匹配项,那么如何在联结表中正确链接名称以引用现有名称。我一直在拖网搜索谷歌但是很难找到任何有价值的话题。我有自己的想法如何处理这个问题,但重要的是我切掉了绒毛并直接了解细节,所以我可以确保我第一次就做好了。先感谢您。
答案 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 }
};