尝试向SQLServer数据库添加行时,实体框架5.0抛出EntityException

时间:2015-08-05 15:01:00

标签: c# entity-framework

我正在制作一个基于实体框架的小型控制台应用程序,我试图访问我存储在计算机中的SQLServer数据库并在其中一个表中添加一行。事情是我尝试运行程序db.SaveChanges();抛出EntityException,即使我用try / catch包围它并且代码在没有任何编译错误的情况下工作,数据也不会保存在数据库中,而是进入catch代码并写入行"没有工作" 。这是代码:

using System;
using System.Collections.Generic;
using System.Data.Entity.Core;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleAchei
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var db = new AcheiEntities2())
            {

                var cliente = new Cliente()
                {
                     ID = 1,
                    NOME = "Fan 123",
                    EMAIL = "SDASDAS@gmail.com",
                    SENHA = "ASHDUASDHUAS"
                };
                try
                {
                    db.Cliente.Add(cliente);
                    db.SaveChanges();
                }
                catch (EntityException e)
                {
                    Console.WriteLine("Didn't work");
                    Console.ReadKey();
                }


            }
        }
    }
}

与数据库的连接工作正常。我只是不知道为什么会抛出这个异常。我基于这段视频https://www.youtube.com/watch?v=o-cV_fSNMqw并且他甚至不需要用try / catch包围它。也许有些兼容性问题? (视频使用实体4.0,我使用5.0)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

EntityException可以是任何东西。

但我会改变

var cliente = new Cliente()
{
     ID = 1,
    NOME = "Fan 123",
    EMAIL = "SDASDAS@gmail.com",
    SENHA = "ASHDUASDHUAS"
};

var cliente = new Cliente()
{
    NOME = "Fan 123",
    EMAIL = "SDASDAS@gmail.com",
    SENHA = "ASHDUASDHUAS"
};

可能您使用SQL Identity设置了ID,但无法手动设置

添加数据注释[Key][DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]

时默认设置标识

或者如果您使用的是Fluent API:

modelBuilder.Entity<Cliente>().Property(s => s.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);