Entity Framework 给我带来了一些麻烦。
这是我的表格:
产品
相关产品
还有我的数据库上下文(无论如何,它的一部分)...
ApplicationContext.cs
public class ApplicationContext : DbContext
{
public ApplicationContext() : base("DefaultConnection")
{
}
public DbSet<Product> Products { get; set; }
public DbSet<RelatedProduct> RelatedProducts { get; set; }
}
还有模型...
Product.cs
public class Product
{
public int ID { get; set; }
public string Manufacturer { get; set; }
public string Model { get; set; }
public string PartNumber { get; set; }
public int CategoryID { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public virtual ICollection<RelatedProduct> RelatedProducts { get; set; }
}
RelatedProduct.cs
public class RelatedProduct
{
public int ID { get; set; }
public int OwnerID { get; set; }
public int ProductID { get; set; }
public virtual Product Owner { get; set; }
public virtual Product Product { get; set; }
}
我想做什么
像这样循环遍历相关产品列表:
<ul class="activity">
@foreach (var related in @Model.RelatedProducts)
{
<li>
<i class="fa fa-chevron-right red"></i> <strong>@related.Product.Manufacturer:</strong> @related.Product.Model
</li>
}
</ul>
问题
我一直收到这个错误L
{"Invalid column name 'Product_ID'.\r\nInvalid column name 'Product_ID'.\r\nInvalid column name 'Product_ID'."}
有什么想法吗?
最佳答案
如果 Product.RelatedProducts
是 RelatedProduct.Owner
或 RelatedProduct.Product
的反向导航属性,您必须告诉 EF。两者都是可能且有效的,EF 无法自行决定。
带有数据注释的解决方案(假设 Owner
是 RelatedProducts
的倒数):
[InverseProperty("RelatedProducts")]
public virtual Product Owner { get; set; }
public virtual Product Product { get; set; }
或使用 Fluent API:
modelBuilder.Entity<RelatedProduct>()
.HasRequired(r => r.Owner)
.WithMany(p => p.RelatedProducts)
.HasForeignKey(r => r.OwnerID);
modelBuilder.Entity<RelatedProduct>()
.HasRequired(r => r.Product)
.WithMany()
.HasForeignKey(r => r.ProductID)
.WillCascadeOnDelete(false);
可能只有 Fluent API 解决方案可以工作,因为您还需要为其中一种关系禁用级联删除,而这对于数据注释是不可能的。
关于c# - 尝试将对象与 EntityFramework 关联时出现无效列名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454938/