我在此代码中出现此错误:
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
将每一列视为实体密钥。我不知道这是不对的。
我该怎么改变?有什么建议吗?
答案 0 :(得分:0)
你有2个问题:
1)“无法更新EntitySet X的最常见原因,因为它有一个 定义查询“是实体表中缺少数据库中的主键约束。您可以通过SSMS表设计器或使用此查询将主键添加到标识列(请注意,主键应仅设置为一列):< / p>
ALTER TABLE Ingredient_Quantity ADD CONSTRAINT (Ingredient_id) PRIMARY KEY (Ingredient_id)
请注意,在实体映射期间没有将主键视为视图的表(EF使用类来定义表/视图名称和属性以引用每个表/视图列),并且无法插入/更新视图(仅限于允许SELECT
。
2)与参照约束的多重性冲突通常是指源表列定义与之间的冲突。目标表外键。您可以使用以下步骤修复多重性设置:
a)首先定义关系。关系标准应该是这样的:
b)在设计器中打开EDMX文件,右键单击空白设计区域,选择“添加新”=&gt; “关联”。
- 如果您拥有不可为空的外键(例如
,则为一对多关系int
)- 如果您拥有可以为空的外键(例如
int?
),则为零/一对多关系
c)选择最适合您的外键配置的“Multiplicity”设置(请参见下图中的示例)。您可以选择1 (One)
或0..1 (Zero or One)
,具体取决于第二个表中的非null /可空外键。
相关问题:
It has a DefiningQuery but no InsertFunction element... err
Problems with multiplicity and EF 6
Entity Framework Database Update First Multiplicity conflicts