我在下面的类中使用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提出另一种解决方案,是删除模型创建事件,只使用原始表属性。这也有效。
是的,在生成的代码中有一个名为OnModelCreating的方法,但没有edmx文件,也没有像您提到的连接字符串。也没有edmx模式。所以我认为这个工具是使用Code first fluent API。我会尝试你的建议。谢谢。 – Sunil 2014-09-06 03:19:24
我在模型创建事件中添加了一个表映射,然后工作。我从'Order_Details'类中删除了表格属性映射。您可以在UPDATE 1下查看我的代码以了解此更改。 – Sunil 2014-09-06 03:28:36
我遵循你的建议通过删除模型创建事件代码,而是使用我的原始表格属性,它的工作。这是一个很棒的提示。希望我可以给你很多点这个神话般的答案。 – Sunil 2014-09-06 03:36:17