2016-05-12 92 views
0

我正在使用C#編寫Visual Studio 2015的最終項目。 我正在做一個應用程序,作爲Android遊戲的模擬器,我有一些字符(models.Personaje)。那些角色有能力(BB),當我想要執行遷移時,它會投擲:MVC指定的C#架構無效

指定的模式無效。錯誤:關係 'Projecte_Final.Models.Personaje_BB'未加載,因爲 'Projecte_Final.Models.BB'不可用。

我不知道我做錯了什麼,這裏是模型BB和Personaje。

BB型號

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Projecte_Final.Models 
{ 
    public class BB 
    { 
    public int ID { get; set; } 
    //Habilidades de los personajes 
    public String Nombre { get; set; } 
    public String BBDesc { get; set; } 

    //Rama del BB (Heal, Support o Atk) 
    public int RamaBBID { get; set; } 
    public virtual RamaBB RamaBB { get; set; } 

    //Tipo del BB (BB, SBB, UBB) 
    public int TipoBBID { get; set; } 
    public virtual TipoBB TipoBB { get; set; } 

    //Grupalidad del BB 
    public int GrupalBBID { get; set; } 
    public virtual GrupalBB GrupalBB { get; set; } 

    public int NhitsBB { get; set; } 
    public int DCBB { get; set; } 
    public int CosteBB { get; set; } 
    public int MultiplicadorBB { get; set; } 

    public int EfectoBBID { get; set; } 
    public virtual Efectos EfectoBB { get; set; } 
    public virtual ICollection<Personaje> Personajes { get; set; } 
    } 
} 

Personaje型號

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Linq; 
using System.Web; 

namespace Projecte_Final.Models 
{ 
    public class Personaje 
    { 
    //Personaje del juego. 

    //Datos generales 
    public int Numero { get; set; } 
    public String Nombre { get; set; } 
    public int NivelMax { get; set; } 
    public int Estrellas { get; set; } 
    public int Coste { get; set; } 

    public virtual ICollection<Stats> Stats { get; set; } 

    //Elemento 
    public int ElementoID { get; set; } 
    public virtual Elemento Elemento { get; set; } 

    //Genero 
    public int GeneroID { get; set; } 
    public virtual Genero Genero { get; set; } 



    //Datos combate 
    public int NHits { get; set; } 
    public int DC { get; set; } 


    //BB 
    public int? BBID { get; set; } 
    public virtual BB BB { get; set; } 

    //SBB 
    public int? SBBID { get; set; } 
    public virtual BB SBB { get; set; } 

    //UBB 
    public int? UBBID { get; set; } 
    public virtual BB UBB { get; set; } 


    //Datos IMPS 
    public int ImpHP { get; set; } 
    public int ImpAtk { get; set; } 
    public int ImpDef { get; set; } 
    public int ImpRec { get; set; } 


    //Descripciones extras 
    public int? LSID { get; set; } 
    public virtual LS LS { get; set; } 

    public int? ESID { get; set; } 
    public virtual ES ES { get; set; } 


    //Pre i post evoluciones 
    public int? PreEvoNum { get; set; } 
    public virtual Personaje PreEvo { get; set; } 
    public int? PostEvoNum { get; set; } 
    public virtual Personaje PostEvo { get; set; } 


    //Imágenes 
    [NotMapped] 
    public HttpPostedFileBase Imagen { get; set; } 
    [NotMapped] 
    public HttpPostedFileBase Icono { get; set; } 
    [NotMapped] 
    public HttpPostedFileBase Gif { get; set; } 
    [NotMapped] 
    public HttpPostedFileBase GifAtaque { get; set; } 


    //Propiedad de navegacion propia 
    public virtual ICollection<Personaje> Personajes { get; set; } 

    //Propiedad de navegacion a Unidad 
    public virtual ICollection<Unidad> Unidades { get; set; } 
    } 
} 

這裏,它是爲模型BB和Personaje分貝範圍內的代碼:

//BB 
     modelBuilder.Entity<BB>().HasKey(x => x.ID); 
     modelBuilder.Entity<BB>().HasRequired(x => x.RamaBB).WithMany(x => x.BBRama).HasForeignKey(x => x.RamaBBID); 
     modelBuilder.Entity<BB>().HasRequired(x => x.TipoBB).WithMany(x => x.BBTipo).HasForeignKey(x =>x.TipoBBID); 
     modelBuilder.Entity<BB>().HasRequired(x => x.GrupalBB).WithMany(x => x.BBGrupal).HasForeignKey(x => x.GrupalBBID); 
     modelBuilder.Entity<BB>().HasRequired(x => x.EfectoBB).WithMany(x => x.BBEfectos).HasForeignKey(x => x.EfectoBBID); 

//Personaje 
     modelBuilder.Entity<Personaje>().HasKey(x => x.Numero); 
     modelBuilder.Entity<Personaje>().HasRequired(x => x.Elemento).WithMany(x => x.Personajes).HasForeignKey(x => x.ElementoID); 
     modelBuilder.Entity<Personaje>().HasRequired(x => x.Genero).WithMany(x => x.Personajes).HasForeignKey(x => x.GeneroID); 
     modelBuilder.Entity<Personaje>().HasOptional(x => x.BB).WithMany(x => x.Personajes).HasForeignKey(x => x.BBID); 
     modelBuilder.Entity<Personaje>().HasOptional(x => x.SBB).WithMany(x => x.Personajes).HasForeignKey(x => x.SBBID); 
     modelBuilder.Entity<Personaje>().HasOptional(x => x.UBB).WithMany(x => x.Personajes).HasForeignKey(x => x.UBBID); 
     modelBuilder.Entity<Personaje>().HasOptional(x => x.ES).WithMany(x => x.Personajes).HasForeignKey(x => x.ESID); 
     modelBuilder.Entity<Personaje>().HasOptional(x => x.LS).WithMany(x => x.Personajes).HasForeignKey(x => x.LSID); 
     modelBuilder.Entity<Personaje>().HasOptional(x => x.PreEvo).WithMany(x => x.Personajes).HasForeignKey(x => x.PreEvoNum); 
     modelBuilder.Entity<Personaje>().HasOptional(x => x.PostEvo).WithMany(x => x.Personajes).HasForeignKey(x => x.PostEvoNum); 

我希望你能幫上忙我,謝謝。

回答

0

我找到了解決辦法,我只好內BB和Personaje三重關係,因爲我有:

//Personaje Model 
     //BB 
    public int? BBID { get; set; } 
    public virtual BB BB { get; set; } 

    ////SBB 
    public int? SBBID { get; set; } 
    public virtual BB SBB { get; set; } 

    ////UBB 
    public int? UBBID { get; set; } 
    public virtual BB UBB { get; set; } 

但我有:

//BB Model 
public virtual ICollection<Personaje> Personajes { get; set; } 

而且它mu ST是:

//BB Model 
    public virtual ICollection<Personaje> PersonajesBB { get; set; } 
    public virtual ICollection<Personaje> PersonajesSBB { get; set; } 
    public virtual ICollection<Personaje> PersonajesUBB { get; set; } 

因爲如果一個模型具有多於1個外鍵相同的實體,每一個外鍵必須具有它們各自的反向導航屬性。

0

嘗試更新您的模型,因爲您可能首先創建了該模型,然後對數據庫進行了一些更改並且未再次更新該模型。

0

我以前有類似的問題。由於該項目只在我的本地,我只是去了數據庫,刪除MigrationHistory表,也刪除了所有的遷移類,並再次執行遷移 - 所以基本上我創建了新的初始遷移。

當您刪除遷移歷史時,EF將無法將您當前的模型與以前的版本進行比較,並且您的當前狀態將基本爲「初始」狀態。

注意

我沒有我的數據庫內的任何關鍵數據,我能做到這一點。所以要小心。這不是推薦的解決方案,但它可以完成這項工作,特別是如果您正在開始項目或準備起點。

欲瞭解更多信息,我可以推薦這個帖子:

Reset Entity-Framework Migrations