使用实体框架5,Visual 2010和实体框架电动工具(Beta 2)扩展。
以下是我的数据库表结构:

我使用了上述扩展的反向工程代码第一函数,它生成POCO类和一些“映射”文件(不确定这是否是正式术语)和一个DbContext派生类。除了我接下来描述的变化之外,所有这些生成的类都是由power工具生成的。
在Category.cs文件中,我添加了以下代码以帮助稍微平平对象图:
private ICollection<Product> m_Products = null;
public ICollection<Product> Products
{
get
{
if (m_Products == null)
{
m_Products = new List<Product>();
foreach (var categoryProduct in CategoryProducts)
{
m_Products.Add(categoryProduct.Product);
}
}
return m_Products;
}
set { m_Products = value; }
}我得到了下面的异常,我知道这一定与映射有关,但我无法完全解决这个问题。
Unhandled Exception: System.Data.EntityCommandExecutionException: An error occurred while
executing the command definition. See the inner exception for details.
---> System.Data.SqlClient.SqlException:
Invalid column name 'Category_CategoryId'.如果我需要发布更多的信息,比如映射的细节,就让我知道,我会这么做的。我想尽量简短,但我意识到,对于那些不熟悉该工具生成的代码的人来说,我忽略了一些东西,可能会留下更多的细节。
发布于 2013-01-03 15:55:14
您已经向模型添加了一个导航属性,因此EF试图将其映射到数据库。“代码优先”是指您的代码模型定义了数据库架构。
尝试将[NotMapped]属性添加到助手属性中,告诉EF忽略它们。
发布于 2013-01-03 16:09:42
如果您已经自动创建了DB方案,并且没有使用像(DropDatabaseAlways/DropDatabaseIfModelChanges)这样的策略--换句话说:您真的在逆向工程中,您似乎必须在“类别”表中手动添加列"CategoryId“。
如果您不想使用该属性(我的意思是DB),您可以使用数据注释[NotMapped]或Fluent modelBuilder.Entity<Category>().Ignore(x=> x.CategoryId)
最后,有可能在映射中出现问题。我不知道您是在使用数据注释还是Fluent API,但是EF可能会自动查找某些db列(从模型派生的逻辑行为),但找不到它。在这种情况下,我建议您修改映射。
发布于 2013-04-05 01:14:24
OP已经解决了他们的问题,但是我也遇到了一个类似的错误。因此,这是为了防止其他人需要它:
在0.1实体之间的关系的一侧,我丢失了一个导航属性。一旦我向丢失它的实体添加了一个适当的导航属性,问题就解决了。
更多细节:我有两个实体,使用FK建立0..1关系。实体A(父母)从FK到实体B(子)。子实体B对实体A具有导航属性,但是A没有对B具有导航属性。在添加此属性后,问题得到了解决。
https://stackoverflow.com/questions/14142186
复制相似问题