Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EntityType';MvcHtmlString';没有定义密钥-MVC 4_C#_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

C# EntityType';MvcHtmlString';没有定义密钥-MVC 4

C# EntityType';MvcHtmlString';没有定义密钥-MVC 4,c#,entity-framework,asp.net-mvc-4,C#,Entity Framework,Asp.net Mvc 4,我有一个page类,它包含一个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; usin

我有一个page类,它包含一个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 “MvcHtmlString”基于没有键的类型“MvcHtmlString” 定义

在我的菜单控制器中显示的行:

IEnumerable<MenuItem> menuItems = db.MenuItems.Where(c => c.ParentID == null).OrderBy(c => c.DisplayOrder).Select(c => c);
IEnumerable menuItems=db.menuItems.Where(c=>c.ParentID==null).OrderBy(c=>c.DisplayOrder).选择(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);


        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Data.Entity;
使用System.Data.Entity.ModelConfiguration;
使用System.ComponentModel.DataAnnotations.Schema;
使用SpringHealthOne.App_启动;
使用System.Web.Mvc;
名称空间SpringHealthOne.Models
{
公共类SpringerContext:DbContext
{
公共数据库集菜单项{get;set;}
公共数据库集页面{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
SetInitializer(新的springercontdeInitializer());
添加(新的MenuItemConfiguration());
基于模型创建(modelBuilder);
}
}
}

我对C#很陌生,对MVC更是如此。任何帮助都会很棒。

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

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

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

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

MvcHtmlString
不是基元类型,所以不能将其直接保存到数据库的字段中。实体类型需要ID属性(否则您将无法在数据库中设置外键)。如果要在数据库中存储
页面
对象,请使用简单的
字符串
而不是
MvcHtmlString

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

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

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

啊,那可以解释很多!。在这种情况下,如何将HTML保存到数据库中?这就是为什么我首先尝试使用MvcHtmlString:)@N1ghteyes我已经用示例更新了答案,它显示了如何在代码中使用MvcHtmlString类型的属性,以及如何将数据保存到数据库的字符串类型的属性谢谢,我现在有一个验证问题,但如果需要,我会在一个新问题中发布:)啊,那可以解释很多!。在这种情况下,如何将HTML保存到数据库中?这就是为什么我首先尝试使用MvcHtmlString:)@N1ghteyes我已经用示例更新了答案,它显示了如何在代码中使用MvcHtmlString类型的属性,以及如何将数据保存到数据库的字符串类型的属性谢谢,我现在有一个验证问题,但如果需要,我会在新问题中发布:)