无法更新EntitySet''因为它有一个DefiningQuery

时间:2017-10-03 03:56:33

标签: asp.net-mvc entity-framework-6

我在此代码中出现此错误:

Unable to update the EntitySet 'Ingredient_Quantity' because it has a
DefiningQuery and no <InsertFunction> element exists in the 
<ModificationFunctionMapping> element to support the current operation.

代码。

Ingredient ing = new Ingredient();
ing.name = ingredientVM.name;
ing.Ingredient_Type_id = ingredientVM.typeId;
ing.UOM_id = ingredientVM.uomId;
ing.is_deleted = 0;

db.Ingredients.Add(ing);
db.SaveChanges();

int latestIngredientId = ing.id;

Ingredient_Quantity iq = new Ingredient_Quantity
{
   Ingredient_id = latestIngredientId,
   quantity_as_of = DateTime.Now,
   quantity = (double)ingredientVM.quantity
};

db.Ingredient_Quantity.Add(iq);
db.SaveChanges(); // HERE IS WHERE I'M GETTING THE ERROR

从我在互联网上看到的情况来看,我的Ingredient_Quantity将每一列视为实体密钥。我不知道这是不对的。

enter image description here

我该怎么改变?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你有2个问题:

1)“无法更新EntitySet X的最常见原因,因为它有一个 定义查询“是实体表中缺少数据库中的主键约束。您可以通过SSMS表设计器或使用此查询将主键添加到标识列(请注意,主键应仅设置为一列):< / p>

ALTER TABLE Ingredient_Quantity ADD CONSTRAINT (Ingredient_id) PRIMARY KEY (Ingredient_id)

请注意,在实体映射期间没有将主键视为视图的表(EF使用类来定义表/视图名称和属性以引用每个表/视图列),并且无法插入/更新视图(仅限于允许SELECT

2)与参照约束的多重性冲突通常是指源表列定义与之间的冲突。目标表外键。您可以使用以下步骤修复多重性设置:

a)首先定义关系。关系标准应该是这样的:

  
      
  • 如果您拥有不可为空的外键(例如int
  • ,则为一对多关系   
  • 如果您拥有可以为空的外键(例如int?),则为零/一对多关系
  •   
b)在设计器中打开EDMX文件,右键单击空白设计区域,选择“添加新”=&gt; “关联”。

c)选择最适合您的外键配置的“Multiplicity”设置(请参见下图中的示例)。您可以选择1 (One)0..1 (Zero or One),具体取决于第二个表中的非null /可空外键。

EF Tables Association

相关问题:

It has a DefiningQuery but no InsertFunction element... err

Problems with multiplicity and EF 6

Entity Framework Database Update First Multiplicity conflicts