2017-10-18 54 views
0

我想知道爲什麼當首先使用代碼時出現錯誤,而不是先數據庫時出現錯誤。爲了讓您快速瀏覽一下我的應用程序,這是我的課:首次使用代碼時出錯

[Table("Votes")] 
public class Vote { 
    [Key()] 
    public int Id { get; set; } 

    [ForeignKey("User")] 
    public int UserId { get; set; } 
    public virtual User User { get; set; } 

    [ForeignKey("Answer")] 
    public int AnswerId { get; set; } 
    public virtual Answer Answer { get; set; } 
} 

而此行的代碼之後:

Vote v = new Vote(); 
v.UserId = 1; 
v.AnswerId = 1; 

using (var context = new DatabaseContext()) { 
    context.Votes.Add(v); 
    context.SaveChanges(); 
} 

我得到錯誤:

An unhandled exception of type 'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dll 

Additional information: An error occurred while updating the entries. See the inner exception for details. 

所以錯誤當我使用code firstSQLExpress數據庫時發生。當我使用database firstSQLite數據庫時,它就像一個魅力。相同的類,但沒有錯誤。

我注意到,爲避免出現錯誤,我必須初始化v.Userv.Answer。但爲什麼?在database first這是沒有必要的。

+0

你可以嘗試將它們設置爲null並嘗試? –

+0

@KeyurPATEL是的,它仍然不起作用。它僅在創建'User'和'Answer'的新實例並將它們分配給'v'對象屬性時才起作用。 – Dawvawd

+0

請問您可以添加您的模型生成器 –

回答

0

看起來像你還沒有編碼db上下文類。您需要創建dbcontext類,例如。

using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using Votes.Models; 
namespace vote.Context 
{ 
    public class DatabaseContext : DbContext 
    { 
     public DatabaseContext() : base("VotesDatabase") 
     { } 
     public DbSet<Vote> Votes{ get; set; } 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     } 
    } 
} 

下面是您瞭解基本codefirst MVC應用程序的示例。 Creating MVC Applications Using Entity Framework Code First Approach