c# - 更改 LINQ 对象数据上下文

标签 c# sql linq

我在 SQL (A) 中有一个对象与另一个对象 (B) 具有多对多关系。我目前正在构建一个 API 层 DLL,它允许用户将类型 B 的对象分配给类型 A。现在,用户将使用不同的 LINQ 数据上下文检索类型 A 的条目列表和类型 B 的条目列表.问题在于,与 A 关联的数据上下文将与 B 关联的数据上下文中的任何对象视为新对象,并在我调用 SubmitChanges() 时尝试插入它们。有没有办法告诉数据上下文A,这些对象已经存在,不需要再创建了?我想编写的代码看起来像这样(我将调用 A 服务和 B 输出):

List<Service> svcs = Service.GetServices();
List<Output> outs = Output.GetOutputs();

svcs[0].OutputCollection.Add(outs);
svcs[0].Save();

我的示例中的每个服务对象都有一个对从数据库中提取它的数据上下文的引用,并且保存函数调用 DataContext.SubmitChanges();上面的代码抛出一个异常,因为它试图将已经存在的输出添加回表中。

我知道这很长,但我不确定我是否很好地解释了我的问题。任何见解或建议都会有所帮助。

最佳答案

我实际上找到了一种不同的解决方案,现在我什至觉得问这个问题有点愚蠢。我在 Service.Outputs.Add() 方法中所做的确实是问题所在:

public void Add(Output output)
{
    OutputCollectionItem oci = new OutputCollectionItem();
    oci.item = output;
    this.OutputCollection.Add(oci);
}

我应该做的是:

public void Add(Output output)
{
    OutputCollectionItem oci = new OutputCollectionItem();
    oci.itemID = output.itemID;
    this.OutputCollection.Add(oci);
}

关于c# - 更改 LINQ 对象数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/303167/

相关文章:

c# - 可查询属性不明确引用错误

c# - 如何在 C# 中的 Windows 窗体上设置波斯日历

c# - 这是编写异步方法的正确方法吗?

c# - 如何使用 LINQ 在列表中生成重复项?

mysql - 将 count(*) 与 SQL 语句合并到一张表中

mysql - 在单个 SELECT 语句中获取数据的每月分布

c# - 为什么有 OrderBy 和 OrderByDescending 而没有 OrderBy(SortOrder)?

c# - 从具有多个零值的枚举中获取项目名称

c# - 这足以签署数据吗?

php - mysqli 的 odbc_result 方法的替代方法