实体框架 - "无法创建类型的常量值..."异常

Išk*_*uda 6 c# entity-framework exception

有人可以帮我解决这个异常:

测试方法KravmagaTests.Model.Entities.StudentTest.Create_Valid_Student抛出异常:System.NotSupportedException:无法创建类型为"Kravmaga.Models.Account"的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').

我运行这个测试方法时得到这个:

[TestMethod]
public void Create_Valid_Student()
{
    Student student = new Student()
    {
        Username = "username",
        Firstname = "firstname",
        Surname = "surname",
        Email = "email@gmail.com",
        Password = "password",
    };
    KravmagaContext context = new KravmagaContext();
    context.AddToAccounts(student);
    context.Save();
    bool exists = context.Accounts.Contains(student); // THIS THROWS EXCEPTION
    Assert.IsTrue(exists);
}
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Sla*_*uma 9

以这种方式更改您的测试方法:

// ...
context.Save();
int newStudentId = student.Id;
// because the Id generated by the DB is available after SaveChanges

bool exists = context.Accounts.Any(a => a.Id == newStudentId);
Assert.IsTrue(exists);
Run Code Online (Sandbox Code Playgroud)

Contains在这里不起作用,因为它检查特定对象实例是否在context.Accounts集合中.不支持将此检查转换为SQL,仅适用于原始类型(如异常所述).Any只需将您指定的过滤器表达式转换为SQL并将其传递给数据库.