首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架多对多首先插入代码

实体框架多对多首先插入代码
EN

Stack Overflow用户
提问于 2012-05-04 14:30:22
回答 1查看 1.7K关注 0票数 0

这是我的模型

代码语言:javascript
复制
    public class Post 
    {
    public long PostID { get; set; }  

    [Required]
    [MaxLength(255)]
    public string Title { get; set; }     
    }    

    public class Tag
    {     
    public long TagID { get; set; }
    [Required]
    [Display(Name = "Tag Name")]
    [MaxLength(30)]
    public string TagName { get; set; } 
    public bool IsActive { get; set; }
    }

   public class TagPost
   {    
    public long TagPostID { get; set; }     
    public long PostID { get; set; }      
    public long TagID { get; set; }

    [ForeignKey("PostID")]
    public virtual Post Posts { get; set; }
    [ForeignKey("TagID")]
    public virtual Tag Tags { get; set; }
    }

1)这是EF 4.1中正确的多对多配置吗,而没有提到多对多的模型绑定。

2)如果我已经使用dataannotation完成了多对多配置,那么为什么数据没有插入到tagpost中。

代码语言:javascript
复制
  public void InsertPostQuestion(Post post,List<string> tags)
  {

        context.Posts.Add(post);
        foreach (string tag in tags)
        {
            Tag tagr = new Tag();
            tagr.TagName = tag;
            tagr.IsActive = true;
            context.Tags.Add(tagr);

        }           
        context.SaveChanges(); 

    }

3)我必须定义模型绑定器才能有多对多的插入、删除或更新?

代码语言:javascript
复制
 modelBuilder.Entity<Post>().
        HasMany(c => c.Tags).
        WithMany(p => p.Posts).
        Map(
        m =>
        {
            m.MapLeftKey("PostID");
            m.MapRightKey("TagID");
            m.ToTable("TagPost");
        });
EN

回答 1

Stack Overflow用户

发布于 2012-05-04 14:37:34

将您的模型更改为:

代码语言:javascript
复制
public class Post 
{
public long PostID { get; set; }  

[Required]
[MaxLength(255)]
public string Title { get; set; }  

public bool IsActive { get; set; }

public virtual List<Tag> Tags { get; set; }
}

public class Tag
{     
public long TagID { get; set; }
[Required]
[Display(Name = "Tag Name")]
[MaxLength(30)]
public string TagName { get; set; } 
public bool IsActive { get; set; }

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

然后像这样保存:

代码语言:javascript
复制
public void InsertPostQuestion(Post post,List<string> tags)
{
    context.Posts.Add(post);
    foreach (string tag in tags)
    {
        // TODO: If tag has a unique index on TagName, see if it exists first
        Tag tagr = new Tag();
        tagr.TagName = tag;
        tagr.IsActive = true;
        context.Tags.Add(tagr);
        post.Tags.Add(tagr);
    }           
    context.SaveChanges(); 
}

EF将在数据库中创建中间表,并自动很好地填充它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10443814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档