如果Exists不添加数据实体框架多对多

时间:2015-07-14 18:40:59

标签: entity-framework repository-pattern one-to-many

我有两个Models逻辑在这里一个帖子可以有多个类别。

     public class Post
     {
            public Post()
            {
                this.Categories = new HashSet<Category>();
            }
            public int Id { get; set; }
            public string Title { get; set; }
            public string Description { get; set; }
            public string ShortDescription { get; set; }
            public string PostImage { get; set; }
            public string Thumbnail { get; set; }
            public DateTime CreatedDate { get; set; }
            public DateTime? PublishedDate { get; set; }
            public string  CreatedBy { get; set; }

            public virtual ICollection<Category> Categories { get; set; }

      }

     public class Category
        {
            public int Id { get; set; }
            public string Name { get; set; }

            public virtual ICollection<Post> Posts { get; set; }

        }

我有三个静态类别。

当我尝试添加新帖子时,多路复用CategoryTable创建具有相同名称的新类别,并将其映射到CategoryPostsTable

问题在于我想将该数据与现有类别进行映射。我不想添加同名的新类别。

我正在使用Repository Pattern我应该如何控制它? EF有解决方案吗?

1 个答案:

答案 0 :(得分:0)

我假设您有以下代码:

var post = new Post();
post.Categories.Add(cat);
context.Posts.Add(post);

...其中cat是表示现有类别的Category对象。

后一种Add方法(DbSet.Add)并不仅仅将收到的实体标记为Added,而是将其对象图中的所有实体标记为未附加到上下文。因此,如果cat尚未附加,Added也会被标记为context.Entry(cat).State = System.Data.Entity.EntityState.Unchanged;

你能做的是

FragmentTransaction

现在EF只会创建与该类别的关联,但不会插入新类别。