gpt4 book ai didi

c# - 在 Entity Framework 中附加问题

转载 作者:搜寻专家 更新时间:2023-10-30 23:45:15 24 4
gpt4 key购买 nike

我创建了一个返回表(物理存储表)的存储过程。

CREATE PROCEDURE uspTest
AS
BEGIN
SELECT * from Table1
END

当我使用 Entity Framework 捕获输出时,它会正确加载实体。

var output = entities.Database.SqlQuery<Table1>("dbo.uspTest").ToList<Table1>();

“输出”变量包含从 SP 返回的数据,但 Table1 对象列表不会自动加载外键表。我添加了下面的代码来缓解这个问题

foreach (var member in output)
{
entities.Table1s.Attach(member);
}

附加每个实体后,所有子表都链接到每个 Table1 成员。但是,当我第二次回到同样的方法时,它给我一个无法附加的错误。

Attaching an entity of type 'Table1' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. 

我尝试将实体状态设置为分离但没有成功!!有人知道我应该在这里做什么吗?

我正在使用数据库优先方法。

最佳答案

Database.SqlQuery<TElement> 的结果即使返回的对象类型是实体类型,也永远不会被上下文跟踪。如果你希望返回的实体被上下文跟踪,那么你应该使用 DbSet<TEntity>.SqlQuery 方法:

var output = entities.Table1s.SqlQuery("dbo.uspTest").ToList();

这样您就不需要使用额外的代码来附加实体。

但是,为什么要访问 Table1在您已经拥有 DBSet<Table1> Table1s 时使用 SP ?。我猜你有一个更复杂的存储过程,你这样做是为了解释你的问题,但如果那是你的 SP,正如@DLeh 在上面评论的那样,你应该使用 Linq to Entities .

关于c# - 在 Entity Framework 中附加问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com