'System.Data.Entity.ModelConfiguration.ModelValidationException'发生在 EntityFramework 中.dll但未在用户代码中



i m在现有的MVC项目上工作。从dbcontext继承的上下文类都很好,但是当我将其更改为IdentityDbContext时,我会遇到该错误。该行中的错误发生:var makaleler = context.makale.tolist();

我的控制器:

using mvcblogdeneme.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace mvcblogdeneme.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        BlogDatabaseContext context = new BlogDatabaseContext();
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult CategoryWidgetGetir()
        {
            var kat = context.Kategori.ToList();
            return View(kat);
        }
        public ActionResult TumMakalelerGetir()
        {
            var makaleler = context.Makale.ToList();
            return View("MakaleListele", makaleler);//makalelistele bi partial view
        }
    }
}

这是我的模型:

namespace mvcblogdeneme.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;
    [Table("Makale")]
    public partial class Makale
    {
        public int Id { get; set; }
        [Required]
        [StringLength(150)]
        public string Baslik { get; set; }
        [Required]
        public string Icerik { get; set; }
        public DateTime YayimTarihi { get; set; }
        public int KategoriID { get; set; }
        public virtual Kategori Kategori { get; set; }
    }
}

如果例外消息显示这样的例外消息,并且正在使用DbContext

entityType'[[表名称]]'没有定义键。定义关键 这个实体类型。

entityType:entitySet'[[entity name]]'是基于类型'[[table name]]'' 没有定义键。

那么,绝对需要在 Id属性上使用 KeyAttribute将其标记为表模型类中的主要键字段,并且问题将解决:

[Table("Makale")]
public partial class Makale
{
    // if the ID also set as auto-increment, uncomment DatabaseGenerated attribute given below
    // [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int Id { get; set; }
    [Required]
    [StringLength(150)]
    public string Baslik { get; set; }
    [Required]
    public string Icerik { get; set; }
    public DateTime YayimTarihi { get; set; }
    public int KategoriID { get; set; }
    public virtual Kategori Kategori { get; set; }
}

但是,如果发现原因是IdentityDbContext和EF代码首先使用的原因,则需要执行这些步骤(以 dotnethaggis 来信):

  1. IdentityUserLogin&创建配置类IdentityUserRole

    // taken from /a/20912641
    public class IdentityUserLoginConfiguration : EntityTypeConfiguration<IdentityUserLogin>
    {
        public IdentityUserLoginConfiguration()
        {
            HasKey(iul => iul.UserId);
        }
    }
    public class IdentityUserRoleConfiguration : EntityTypeConfiguration<IdentityUserRole>
    {
        public IdentityUserRoleConfiguration()
        {
            HasKey(iur => iur.RoleId);
        }
    }
    
  2. OnModelCreating方法中添加上面的这两个配置:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new IdentityUserLoginConfiguration());
        modelBuilder.Configurations.Add(new IdentityUserRoleConfiguration());
    }
    

此时,由于设置了每个身份表的主要键,因此应解决错误。

类似问题:

类型'system.data.entity.modelconfiguration.modelvalidation exception'的例外发生在EntityFrameWork.dll

将mydbContext与IdentityDbContext

合并

相关内容

  • 没有找到相关文章

最新更新