c# - System.Data.Entity.ModelConfiguration.ModelValidationException

标签 c# sql-server entity-framework

我正在使用代码优先方法,我知道我不应该在我的 Controller 中有这么多代码,无论如何我都会收到这个错误

System.Data.SqlClient.SqlException' occurred in EntityFramework.dll but was not handled in user code

内部异常就是这个

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces,

这是我的代码

 [HttpPost]
    public ActionResult Registration(Models.Users model)
    {
        if (ModelState.IsValid)
        {
            using (var Ref_DB = new MainDBContext())
            {
                var encryptedPassword = CustomLibraries.CustomEncrypt.Encrypt(model.Password);
                var user = Ref_DB.Users.Create();//this is where error occours
                user.Email = model.Email;
                user.Password = encryptedPassword;
                user.Country = model.Country;
                user.Name = model.Name;
                Ref_DB.Users.Add(user);
                Ref_DB.SaveChanges();
            }
        }
        else
        {
            ModelState.AddModelError("", "One or more feilds have been errors");            
        }
        return View();

我意识到我的连接字符串可能是我的连接字符串的问题

<connectionStrings>
<add name="DefaultConnection"  connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True"
providerName="System.Data.SqlClient"/>

.mdf 文件在我的 App_Data 文件夹中

这是我的模型

 public class MainDBContext:DbContext
{
    public MainDBContext()
        :base("name=DefaultConnection")
    {

    }
    public DbSet<Models.Users> Users { get; set; }
}

这是用户类

 public class Users
{
    #region [- Ctor -]
    public Users()
    {

    }
    #endregion

    [Key]
    public int Id { get; set; }

    #region [- Email -]
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
    #endregion

    #region [- PassWord -]
    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    #endregion

    public string Name { get; set; }

    public string Country { get; set; }

}

最佳答案

是的,你的连接字符串是错误的。你必须附加 mdf 文件,就像这样 \MyDatabase.mdf

完整的连接字符串:

<add name="DefaultConnection"  connectionString="Data Source=
(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Integrated 
Security=True" providerName="System.Data.SqlClient"/>

更新:

使用这个:

var user = new Models.Users();

代替这个:

var user = Ref_DB.Users.Create();//this is where error occurs

更新 2:

在您的cmd 提示符 上运行以下命令

sqllocaldb create "v12.0"

您必须像这样更改安装目录:

C:\Program Files\Microsoft SQL Server\120\Tools\Binn>sqllocaldb create "v12.0"

更新 3:

Breaking Changes to LocalDB

关于c# - System.Data.Entity.ModelConfiguration.ModelValidationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39555355/

相关文章:

c# - 通过 C# 打开 IE -> mailto 失败

c# - “您必须添加对 Microsoft.Practices.EnterpriseLibrary.Common 的引用”,即使程序集位于 GAC 中

c# - ASP.NET GridView - 控件在内容页面中移动

c# - Entity Framework 只保存最后一行(主要细节)

asp.net - Entity Framework 代码首先已经打开数据阅读器?

c# - 需要一个 linq to objects 查询嵌套集合

sql - 使用 Coalesce 时 '.' 附近的语法不正确

sql-server - 如何查找数据库中使用 UNION 的所有对象

sql - ON 条件是否限制了加入的选择所做的工作量?

c# - EntityFramework 6 如何通过反射获取身份字段?