我有一个页面类,其中包含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/