2016-07-12 52 views
1

我試圖創造與擁有它的自定義類型的模型控制器...錯誤創建控制器,支持自定義類型使用實體框架ASP.NET MVC

我有ID和A型主類'工作',在那裏我宣佈了三個屬性,其中一個依賴於另外兩個。然後我創建了一個dbset類型。我的映射屬性是否不正確?

我收到以下錯誤: 運行選定的代碼生成器時出錯:「無法檢索'Stack.Models.Work'的元數據」。該屬性總和不是數學類型的聲明屬性。通過使用Ignore Method或NotMappedAttribute數據註釋驗證該屬性是否未被顯式從模型中排除。確保它是一個有效的基本屬性。

namespace stack.Models 
{ 
public class Work 
{ 
    [Key] 
    public int ID { get; set; } 

    public Work() 
    { 
     this.Maths = new Math(); 
    } 



    public Math Maths { get; set; } 


} 


[ComplexType] 
public class Math 
{ 

    public int first { get; set; } 
    public int second { get; set; } 
    public int sum 
    { 
     get 
     { 
      try 
      { 
       return first + second; 
      } 
      catch 
      { 
       return 0; 
      } 
     } 

    } 
} 


public class WorkDBContext: DbContext 
{ 
    public DbSet<Work> Working { get; set; } 



    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.first).IsRequired(); 

     modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.second).IsRequired(); 

     modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.sum).IsRequired(); 


     base.OnModelCreating(modelBuilder); 
    } 

} 


} 
+0

'是計算sum',只讀屬性,因此它不能被映射到數據庫字段。您是否嘗試過建議的[[NotMapped]]屬性?另外,你爲什麼要將計算值設置爲'isRequired'? –

回答

0

總和不是簡單的類型(在數據庫列),這是一個數據功能(從其他性質在計算),你不必將其存儲在數據庫中。

[ComplexType] 
public class Math 
{ 

    public int first { get; set; } 
    public int second { get; set; } 

    [NotMapped] 
    public int sum 
    { 
     get 
     { 
      return first + second; 
     } 
    } 
} 

刪除此行:

modelBuilder.Entity<Work>() 
        .Property(c => c.Maths.sum).IsRequired(); 
+0

非常感謝! – johndoesnow

相關問題