2014-09-06 54 views
1

我在下面的类中使用System.ComponentModel.DataAnnotations.Schema.TableAttribute,所以类'Order_Details'被映射到Northwind数据库中的'Order Details'表。表名映射在EF 6中不起作用使用POCO类时

有一个属性表(“订单细节”]的正上方的类定义将其映射到数据库表。

问题是,当一个LINQ查询执行对数据库,它会尝试查询“ORDER_DETAILS '数据库中的表,当它应该查询'订单明细'表时

问题:我是否必须使用其他属性将此类映射到数据库中的“订单明细”表?此POCO类(没有表格属性)由第三方代码生成器使用实体框架生成。

[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文件,它是使用“代码第一流畅API”由Jeow李欢在他的回答表明,我添加了一个表映射为“订单详情”在模型创建事件和它的工作。

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"); 

     } 

UPDATE 2

而且,如由Jeow提出另一种解决方案,是删除模型创建事件,只使用原始表属性。这也有效。

回答

2

守则第一流利的API

你用也产生了DbContextOnModelCreating方法是使用代码映射你的Order_DetailsOrder_Details表的工具?

如果存在,请将其删除。

数据库/模型第一

你使用产生使在类的所有属性.edmx文件的工具被忽略? (请检查您的连接字符串metadata=res://*/Models.Model.csdl,这意味着正在使用.edmx)。

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

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

难道工具存储在数据库中的EDMX架构?查找您未在数据库中创建的表。

如果在数据库中有edmx模式,则必须对其进行修改。

+0

是的,在生成的代码中有一个名为OnModelCreating的方法,但没有edmx文件,也没有像您提到的连接字符串。也没有edmx模式。所以我认为这个工具是使用Code first fluent API。我会尝试你的建议。谢谢。 – Sunil 2014-09-06 03:19:24

+0

我在模型创建事件中添加了一个表映射,然后工作。我从'Order_Details'类中删除了表格属性映射。您可以在UPDATE 1下查看我的代码以了解此更改。 – Sunil 2014-09-06 03:28:36

+0

我遵循你的建议通过删除模型创建事件代码,而是使用我的原始表格属性,它的工作。这是一个很棒的提示。希望我可以给你很多点这个神话般的答案。 – Sunil 2014-09-06 03:36:17