首先使用代码时出错

时间:2017-10-18 01:29:40

标签: c# sql-server entity-framework sqlite

我想知道为什么在首先使用代码时会出现错误,但在数据库优先时却没有。为了让您快速了解我的应用程序,这是我的课程:

[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 first SQLite数据库时,它就像一个魅力。相同的类,但没有错误。

我注意到,为避免出错,我必须初始化v.Userv.Answer。但为什么?在database first中,这是不必要的。

1 个答案:

答案 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