2017-03-16 49 views
0

我在一個現有的MVC項目上工作。當我的上下文類從DBContext everythink繼承是好的,但當我改變它到IdentityDbContext我得到的錯誤。該錯誤發生在該行: var makaleler = context.Makale.ToList();'System.Data.Entity.ModelConfiguration.ModelValidationException'發生在EntityFramework.dll中,但沒有在用戶代碼中處理

我的控制器:

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; } 
    } 
} 

回答

0

如果異常消息顯示這樣和DbContext正在使用:

的EntityType「[[表名稱]]'沒有定義密鑰。定義此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()); 
    } 
    

在這一點上,誤差應該得到解決,由於主鍵每個身份表已被設置。

類似的問題:

An exception of type 'System.Data.Entity.ModelConfiguration.ModelValidationException' occurred in EntityFramework.dll

Merge MyDbContext with IdentityDbContext

相關問題