使用POCO类时,表名称映射在EF 6中不起作用

时间:2014-09-06 01:33:28

标签: c# sql-server-2008-r2 entity-framework-6

我在下面的类中使用System.ComponentModel.DataAnnotations.Schema.TableAttribute,因此类'Order_Details'被映射到Northwind数据库中的表'Order Details'。

在类定义之上有一个属性[Table(“Order Details”),用于将其映射到数据库表。

问题是当LINQ查询针对数据库执行时,它会尝试查询数据库中的“Order_Details”表,当它应该查询“Order Details”表时。

问题:我是否必须使用其他一些属性将此类映射到数据库中的“订单详细信息”表?此POCO类(没有表属性)是由使用Entity Framework的第三方代码生成器生成的。

[Table("Order Details")]
public class Order_Details
{
    [Key]
    [Column(Order = 0)]
    [Required]
    [Display(Name = "Order I D")]
    public Int32 OrderID { get; set; }

    [Key]
    [Column(Order = 1)]
    [Required]
    [Display(Name = "Product I D")]
    public Int32 ProductID { get; set; }

    [Required]
    [Display(Name = "Unit Price")]
    public Decimal UnitPrice { get; set; }

    [Required]
    [Display(Name = "Quantity")]
    public Int16 Quantity { get; set; }

    [Required]
    [Display(Name = "Discount")]
    public Decimal Discount { get; set; }

    // ComboBox
    public virtual Orders Orders { get; set; }
    public virtual Products Products { get; set; }

}

更新1:

由于没有edmx文件并且正如Jeow Li Huan在他的回答中所建议的那样使用“Code first Fluent API”,我在模型创建事件中添加了“Order Details”的表映射,然后就可以了。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //added this in place of Table attribute and it works
            modelBuilder.Entity<Order_Details>().ToTable("Order Details");

            modelBuilder.Entity<Orders>().ToTable("Orders");
            modelBuilder.Entity<Products>().ToTable("Products");
            modelBuilder.Entity<Customers>().ToTable("Customers");
            modelBuilder.Entity<Employees>().ToTable("Employees");
            modelBuilder.Entity<Shippers>().ToTable("Shippers");
            modelBuilder.Entity<Suppliers>().ToTable("Suppliers");
            modelBuilder.Entity<Categories>().ToTable("Categories");

        }

更新2

此外,Jeow建议的另一个解决方案是删除模型创建事件并仅使用原始表属性。这也有效。

1 个答案:

答案 0 :(得分:2)

代码第一个流畅的API

您使用的工具是否也生成了DbContext OnModelCreating方法,该方法使用代码将您的Order_Details映射到Order_Details表?

如果有,请将其删除。

首先是数据库/模型

您使用的工具是否生成了导致该类上所有属性被忽略的.edmx文件? (在metadata=res://*/Models.Model.csdl的连接字符串下检查,这意味着正在使用.edmx。)

如果有.edmx,那么您必须使用该文件映射表格。

我认为旧代码首先以这种方式工作

该工具是否将edmx架构存储在数据库中?查找您未在数据库中创建的表。

如果数据库中存在edmx架构,则必须对其进行修改。