在带有Entity Framework的ASP.NET MVC中,在此上下文中仅支持原始类型或枚举类型

错别字

我正在创建一个示例ASP.NET MVC Web应用程序,并且正在遵循数据库的代码优先方法。我想创建products表和transactions表,此外,我想通过迁移包括一些示例数据,但是当我尝试这样做时,Update-Database我得到了标题中提到的错误消息。我确切知道错误发生的原因,这是因为我使用List<Product>,如下所示。但是,我不知道该如何解决该问题,而交易应包括一个或多个产品。我的代码段可以在下面找到。

public class Product
{
    public int ProductID { get; set; }

    public string Name { get; set; }

}

public class Transaction
{
    public int TransactionID { get; set; }

    public List<Product> Products { get; set; }

}

我还在文件中添加了以下代码行IdentityModels.cs

public DbSet<Product> Products { get; set; }

public DbSet<Transaction> Transactions { get; set; }

最后,Configuration.cs保存迁移的文件如下所示:

public Configuration()
{
    AutomaticMigrationsEnabled = true;
    AutomaticMigrationDataLossAllowed = true;
}

protected override void Seed(MyApp.Models.ApplicationDbContext context)
{
    var pr = new List<Product>();
    pr.Add(new Product { Name = "Book" });
    pr.Add(new Product { Name = "Table" });
    pr.Add(new Product { Name = "Chair" });

    pr.ForEach(i => context.Products.AddOrUpdate(p => p.Name, i));
    context.SaveChanges();

    context.Transactions.AddOrUpdate(
        t => t.Products,
        new Transaction { Products = new List<Product>(pr.Where(p => p.Name == "Book" || p.Name == "Table")) },
        new Transaction
        {
            Products = new List<Product>(pr.Where(p => p.Name == "Chair" || p.Name == "Book" || p.Name == "Table"))
        }
    );

    context.SaveChanges();
}
塔赫·拉古伊(Taher Rahgooy)

问题是AddOrUpdate方法的第一个参数,即identifierExpression您应该在此处提供基本类型,该基本类型确定何时要更新和何时添加。如果数据库中的一行匹配,identifierExpression它将用您提供的新行进行更新。如果没有,新的将被插入到数据库中。

您用作t.Products标识符,这意味着,当您要添加Products的数据库与数据库行之一相同时,应该进行更新,因为Products没有原始类型,所以更新不正确因此,您可以提供原始类型属性或根本不使用此参数(这意味着将插入所有项目)。

context.Transactions.AddOrUpdate(
    //t => t.Products,   //comment this
    new Transaction { 
        Products = new List<Product>(
                        pr.Where(p => p.Name == "Book" || p.Name == "Table")) 
    },
    new Transaction
    {
        Products = new List<Product>(
                pr.Where(p => p.Name == "Chair" || p.Name == "Book" || p.Name == "Table"))
    }
);

建议

从您的Seed方法中可以推断出Transaction之间的关系Product是多对多的。如果是这种情况,则应为EF指定它。根据您当前的模型,该关系是一对多的。您可以像这样在Context类中更改它

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Transaction>().HasMany(x => x.Products).WithMany();
}

附带说明一下,如果要向模型添加延迟加载,则应声明as的Products属性Transactionvirtual

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在带有Entity Framework的ASP.NET MVC中,在此上下文中仅支持原始类型或枚举类型

来自分类Dev

Asp.Net-无法创建类型的常量值。在此上下文中仅支持原始类型或枚举类型

来自分类Dev

带有Asp.Net Core中间件或Mvc筛选器的Entity Framework Core 1.0工作单元

来自分类Dev

在ASP.NET Core中的IoC服务容器的上下文中有哪些请求?

来自分类常见问题

无法创建类型的常量值在此上下文中仅支持原始类型或枚举类型

来自分类Dev

无法创建类型“?”的常量值。在此上下文中仅支持原始类型或枚举类型

来自分类Dev

无法创建类型“?”的常量值。在此上下文中仅支持原始类型或枚举类型

来自分类Dev

错误:在此上下文中仅支持原始类型或枚举类型

来自分类Dev

同一上下文中的ASP.NET MVC域模型和身份模型-UserLogin没有密钥

来自分类Dev

同一上下文中的ASP.NET MVC域模型和身份模型-UserLogin没有密钥

来自分类Dev

DllImport-在测试上下文中工作,但不在ASP.NET MVC中工作

来自分类Dev

使用Entity Framework MVC ASP.NET创建具有自定义类型的控制器时出错

来自分类Dev

与单个表的多个关系Entity Framework asp.net MVC

来自分类Dev

EntityFramework无法创建类型为“匿名类型”的常量值。在此上下文中仅支持原始类型或枚举类型

来自分类Dev

C#-Linq:无法创建类型的常量值在此上下文中仅支持原始类型或枚举类型。

来自分类Dev

无法创建类型'x'的常量值。在此上下文中仅支持原始类型或枚举类型

来自分类Dev

ASP.NET MVC4和Entity Framework中的.NET成员资格,Oracle为Db

来自分类Dev

ASP.NET MVC在当前上下文中不存在名称“文件”

来自分类Dev

ASP.NET MVC在当前上下文中不存在名称“文件”

来自分类Dev

实体类型ApplicationUser不是当前上下文的模型的一部分Asp.Net MVC

来自分类Dev

无法创建类型为“匿名类型”的常量值。在此上下文中仅支持原始类型或枚举类型。在 Linq C#

来自分类Dev

具有IdentityServer的ASP.Net Identity无法在控制器上下文中获取用户

来自分类Dev

带有ASP.NET MVC的ASP经典功能

来自分类Dev

在Entity Framework 7 RC 1和ASP.NET MVC 6中播种初始数据

来自分类Dev

asp.net mvc中的Breeze + Entity Framework 5 +存储过程

来自分类Dev

LINQ相关错误“无法创建类型'System.Object'的常量值。在此上下文中仅支持原始类型或枚举类型

来自分类Dev

无法创建类型为'EShop.ClassLibrary.ProductType'的常量值。在此上下文中仅支持原始类型或枚举类型

来自分类Dev

EF6 Lambda查询错误:无法创建类型常量...在此上下文中仅支持枚举类型的原始类型

来自分类Dev

带有实体框架的ASP .NET MVC 5中的并发

Related 相关文章

  1. 1

    在带有Entity Framework的ASP.NET MVC中,在此上下文中仅支持原始类型或枚举类型

  2. 2

    Asp.Net-无法创建类型的常量值。在此上下文中仅支持原始类型或枚举类型

  3. 3

    带有Asp.Net Core中间件或Mvc筛选器的Entity Framework Core 1.0工作单元

  4. 4

    在ASP.NET Core中的IoC服务容器的上下文中有哪些请求?

  5. 5

    无法创建类型的常量值在此上下文中仅支持原始类型或枚举类型

  6. 6

    无法创建类型“?”的常量值。在此上下文中仅支持原始类型或枚举类型

  7. 7

    无法创建类型“?”的常量值。在此上下文中仅支持原始类型或枚举类型

  8. 8

    错误:在此上下文中仅支持原始类型或枚举类型

  9. 9

    同一上下文中的ASP.NET MVC域模型和身份模型-UserLogin没有密钥

  10. 10

    同一上下文中的ASP.NET MVC域模型和身份模型-UserLogin没有密钥

  11. 11

    DllImport-在测试上下文中工作,但不在ASP.NET MVC中工作

  12. 12

    使用Entity Framework MVC ASP.NET创建具有自定义类型的控制器时出错

  13. 13

    与单个表的多个关系Entity Framework asp.net MVC

  14. 14

    EntityFramework无法创建类型为“匿名类型”的常量值。在此上下文中仅支持原始类型或枚举类型

  15. 15

    C#-Linq:无法创建类型的常量值在此上下文中仅支持原始类型或枚举类型。

  16. 16

    无法创建类型'x'的常量值。在此上下文中仅支持原始类型或枚举类型

  17. 17

    ASP.NET MVC4和Entity Framework中的.NET成员资格,Oracle为Db

  18. 18

    ASP.NET MVC在当前上下文中不存在名称“文件”

  19. 19

    ASP.NET MVC在当前上下文中不存在名称“文件”

  20. 20

    实体类型ApplicationUser不是当前上下文的模型的一部分Asp.Net MVC

  21. 21

    无法创建类型为“匿名类型”的常量值。在此上下文中仅支持原始类型或枚举类型。在 Linq C#

  22. 22

    具有IdentityServer的ASP.Net Identity无法在控制器上下文中获取用户

  23. 23

    带有ASP.NET MVC的ASP经典功能

  24. 24

    在Entity Framework 7 RC 1和ASP.NET MVC 6中播种初始数据

  25. 25

    asp.net mvc中的Breeze + Entity Framework 5 +存储过程

  26. 26

    LINQ相关错误“无法创建类型'System.Object'的常量值。在此上下文中仅支持原始类型或枚举类型

  27. 27

    无法创建类型为'EShop.ClassLibrary.ProductType'的常量值。在此上下文中仅支持原始类型或枚举类型

  28. 28

    EF6 Lambda查询错误:无法创建类型常量...在此上下文中仅支持枚举类型的原始类型

  29. 29

    带有实体框架的ASP .NET MVC 5中的并发

热门标签

归档