从物化“System.Guid”类型到“System.String”类型的指定转换无效

问题描述:

首先使用MVC EF代码,新项目可以带有账户功能(登录,注册等)。我将DB连接字符串从指向App_Data文件夹中的mdf文件更改为使连接字符串指向SQL Server实例ASP.NET特定表在SQL Server实例中创建。从物化“System.Guid”类型到“System.String”类型的指定转换无效

现在,当此以下自动的线路中生成的代码运行:

var result = await SignInManager.PasswordSignInAsync(model.Email, 
    model.Password, model.RememberMe, shouldLockout: false); 

,则抛出异常:

从物化“的System.Guid”类型指定的强制转换到“系统。字符串'类型无效。

DB字段和域模型是Guids。任何帮助,将不胜感激。

由于

+2

这个错误是告诉你,EF从数据库化的GUID值,而在所需的对象类型该字段是一个字符串。我不知道这行代码确切地做了什么,但是我怀疑你的POCO类与数据库模式不匹配,或者你的模型配置关闭。 – DevilSuichiro

在我的情况,我的实体使用一个GUID作为ID,但在数据库中的ID是为nvarchar(300),I解决通过改变为nvarchar(300)问题uniqueidentifier,但不要知道这可能会对您的数据库/应用程序造成影响,在我的情况下它很简单并且工作正常。

我希望这可以帮助别人有同样的问题。

我通过在查询条件的两端使用ToString()函数解决了这个问题。

初值问题:

Guid userId = Guid.Parse(User.Identity.GetUserId());  
candidateDashBoard.DismissalRecord = db.DismissalRecords.Where(c => 
        c.CandidateId == userId).FirstOrDefault(); 

解决方案:

Guid userId = Guid.Parse(User.Identity.GetUserId()); 
candidateDashBoard.DismissalRecord = db.DismissalRecords.Where(c => 
        c.CandidateId.ToString() == userId.ToString()).FirstOrDefault();