当前位置: 首页 > 编程语言 > C#

mvc与EF中的多对多关系分享

时间:2023-04-10 23:10:59 C#

mvc与EF中的多对多关系标签之间存在多对多的关系。在我的数据库中,我也有PostTagMap,但我在EF模型中看不到它。不确定我是否需要。PostTagMap仅包含帖子和标签的唯一标识符。(应该注意的是,我是从模型创建数据库的)在我的CreatePost视图(和控制器)上,我希望用户可以选择创建标签(和发布),确保他们相互识别。但我找不到办法做到这一点。邮政模式:publicpartialclassPost{publicPost(){this.Tags=newHashSet();}publicintId{得到;放;}publicstringBlogUserEmail{get;放;}publicintCategoryId{得到;放;}公共字符串标题{得到;放;}publicstringShortDescription{get;放;}[AllowHtml]publicstringDescription{get;放;}publicstringMeta{get;放;}公共字符串UrlSlug{得到;放;}publicboolPublished{get;放;}publicSystem.DateTimePostedOn{get;放;}publicNullableModified{get;放;}publicvirtualBlogUserBlogUser{get;放;}publicvirtualCategory类别{get;放;}publicvirtualICollectionTags{get;放;}}创建@using(Html.BeginForm()){@Html.AntiForgeryToken()@Html.ValidationSummary(true)发布@Html.HiddenFor(model=>model.BlogUserEmail,User.Identity.Name)@Html.ValidationMessageFor(model=>model.BlogUserEmail)@Html.LabelFor(model=>model.CategoryId,"Category")@Html.DropDownList("CategoryId",String.Empty)@Html.ValidationMessageFor(model=>model.CategoryId)@Html.LabelFor(model=>model.Title)@Html.EditorFor(model=>model.Title)@Html.ValidationMessageFor(model=>model.Title)@Html.LabelFor(model=>model.ShortDescription)@Html.EditorFor(model=>model.ShortDescription)@Html.ValidationMessageFor(model=>model.ShortDescription)@Html.TextAreaFor(model=>model.Description)@Html.ValidationMessageFor(model=>model.Description)编辑:我不能使用Create视图中的EditorFor字段来标记它,因为Create视图绑定到@ModelMyBlogger.Post。标签仅显示为集合,如果我说:@Html.EditorFor(model=>m.Tags)那么它在呈现时在我的视图中显示为空白。我尝试了一个foreach但它没有用。例如在我的创建视图中尝试这样做:@foreach(variteminModel.Tags){@Html.EditorFor(model=>item.Name)@Html.EditorFor(model=>item.Description)@Html.EditorFor(model=>item.UrlSlug)}我收到错误消息:未将对象引用设置为对象的实例。在多对多关系中,使用DataAnnotationEF将创建多对多关系。在您的情况下,Post类具有TagpublicvirtualICollectionTags{get;的集合导航属性。放;并且Tag具有PostpublicvirtualICollectionPosts{get;的集合导航属性放;这将在帖子和标签之间创建多对多关系。在您看来:有几种方法可以添加/获取标签id的值,将其绑定到模型的一种方法是尝试以下方法,因为您已经在两个模型之间建立了关系:@Html.EditorFor(model=>model.Tags.Id)@Html.ValidationMessageFor(model=>model.Tags.Id)如果您需要一个属性,您需要明确指定它(例如Id、Name...),model.Tags返回一个标签集插入M-to-M关系:if(ModelState.IsValid){Tagtag=newtag{id=post.Tags.Id};db.Tag.Attach(标签);db.Tag.Add(标签);数据库.Posts.Add(帖子);db.SaveChanges();返回RedirectToAction("索引");EF模型中不显示多对多表。要向其中添加行,您必须创建如下内容:PostObject1.Tags.Add(TagObject1)或TagObject1.Posts.Add(PostObject1)。方法如下:插入/更新多个实体框架。我应该怎么办?要选择行,您需要EF对象并访问另一个表的列表。关联(映射)表可能不会显示在EF模型中,但您可以轻松添加新标签post.Tags.add(newTag(){Name=""});作为一种好的做法,您应该创建视图模型,而不是直接将模型用于视图,这里有一个链接可以帮助您链接对于标签,您可以执行EditorTemplate(推荐)或For循环这是一个for循环示例@for(vari=0;imodel.Tags[i].Name)}对于新的,只需添加新按钮,然后单击,只需添加一个新的文本框,但将Id设置为Tags[i].Name,其中i是Count()+1的标签。以上就是《C#学习教程:mvc与EF中多对多关系共享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: