我有一个页面类,其中包含MvcHtmlString类型的变量。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Globalization;
using SpringHealthOne.SpringWS;
using System.Configuration;

namespace SpringHealthOne.Models
{
    public class Page
    {
        public int PageID { get; set; }
        [Required]
        public string Title { get; set; }
        [Required]
        public MvcHtmlString PageBody { get; set; }
        public string MetaTitle { get; set; }
        public string MetaDescription { get; set; }
        public string Keywords { get; set; }
        public bool Published { get; set; }
    }
}


这本身很好,Visual Studio 2012则不会报告任何错误或警告。但是,当我尝试以调试模式启动项目时,它会抛出:


  在模型生成期间检测到一个或多个验证错误:
  
  \ tSystem.Data.Entity.Edm.EdmEntityType::EntityType'MvcHtmlString'
  没有定义键。定义此EntityType的键。
  \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet
  'MvcHtmlStrings'基于没有密钥的'MvcHtmlString'类型
  定义。


弹出的行在我的MenuController中:

IEnumerable<MenuItem> menuItems = db.MenuItems.Where(c => c.ParentID == null).OrderBy(c => c.DisplayOrder).Select(c => c);


我已经将其遍历到调用Page类的数据库上下文中,但是我无法弄清楚为什么我会特别看到该错误。

内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations.Schema;
using SpringHealthOne.App_Start;
using System.Web.Mvc;

namespace SpringHealthOne.Models
{
    public class SpringerContext : DbContext
    {
        public DbSet<MenuItem> MenuItems { get; set; }
        public DbSet<Page> Pages { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer<SpringerContext>(new SpringerContextInitializer());

            modelBuilder.Configurations.Add(new MenuItemConfiguration());
            base.OnModelCreating(modelBuilder);


        }
    }
}


我对C#非常陌生,对MVC则更是如此。任何帮助都是极好的。

最佳答案

MvcHtmlString不是原始类型,因此您不能将其直接保存到数据库字段。实体类型需要ID属性(否则,您将无法在数据库中设置外键)。如果要将string对象存储在数据库中,请使用简单的MvcHtmlString而不是Page

您也可以将此属性标记为未映射,并创建将保存到数据库的字符串属性:

[NotMapped]
public MvcHtmlString PageBody { get; set; }

public string Body
{
    get { return PageBody.ToHtmlString(); }
    set { PageBody = new MvcHtmlString(value); }
}

关于c# - EntityType'MvcHtmlString'没有定义键-MVC 4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20188648/

10-10 22:25