我在下面的类中使用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建议的另一个解决方案是删除模型创建事件并仅使用原始表属性。这也有效。
答案 0 :(得分:2)
代码第一个流畅的API
您使用的工具是否也生成了DbContext
OnModelCreating
方法,该方法使用代码将您的Order_Details
映射到Order_Details
表?
如果有,请将其删除。
首先是数据库/模型
您使用的工具是否生成了导致该类上所有属性被忽略的.edmx文件? (在metadata=res://*/Models.Model.csdl
的连接字符串下检查,这意味着正在使用.edmx。)
如果有.edmx,那么您必须使用该文件映射表格。
我认为旧代码首先以这种方式工作
该工具是否将edmx架构存储在数据库中?查找您未在数据库中创建的表。
如果数据库中存在edmx架构,则必须对其进行修改。