gpt4 book ai didi

c# - 具有数据库生成的属性的 SubmitChanges 上的 NullReferenceException

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:20 25 4
gpt4 key购买 nike

我在这里无能为力。问题是我试图在 LINQ to SQL 中使用数据库生成的标识属性在数据库中创建一个新实体,然后创建与第一个关联的另一个实体。我猜问题是 LINQ to SQL 不能在没有第一个实体的 id 的情况下插入第二个实体,直到数据库生成它才知道。

有没有其他人遇到过这个问题...如果有,您是如何解决的?我知道我可以在创建第一个实体和第二个实体之间调用 SubmitChanges,但这会破坏程序的事务完整性。

这是一个具体的例子:

[Table(Name = "Searches")]
public class Search
{
// Db Generated Key
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public Int32 SearchID { get; set; }

// Each search can have multiple search parameters
private EntitySet<SearchParam> searchParams;

[Association(Storage = "searchParams", ThisKey = "SearchID", OtherKey = "SearchID")]
public EntitySet<SearchParam> SearchParams
{
get
{
return searchParams;
}
set
{
searchParams.Assign(value);
}
}
}

[Table(Name = "SearchParams")]
public class SearchParam
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public Int32 SearchParamID { get; set; }

[Column]
public String ParamValue { get; set; }

// Each search param is associated with one search
[Column]
public Int32 SearchID { get; set; }

private EntityRef<Search> search = new EntityRef<Search>();

[Association(Storage = "search", ThisKey = "SearchID", OtherKey = "SearchID", IsForeignKey = true)]
public Search Search
{
get
{
return search.Entity;
}
set
{
search.Entity = value;
}
}
}

因此对于上面的代码,如果我要执行以下操作,.NET 会在 SubmitChanges 上给我一个 NullReferenceException:

using (SampleDataContext context = new SampleDataContext())
{
Search search = new Search();
search.SearchParams.Add(new SearchParam() { ParamValue = "...paramvalue..." });
context.Searches.InsertOnSubmit(search);
context.SubmitChanges();
}

最佳答案

在我看来,您在调用 add 之前并未初始化 SearchParams 列表。这行得通吗:

using (SampleDataContext context = new SampleDataContext()) {
Search search = new Search();
search.SearchParams = new EntitySet<SearchParam>(); //<-- THIS LINE
search.SearchParams.Add(new SearchParam() { ParamValue = "...paramvalue..." });
context.Searches.InsertOnSubmit(search);
context.SubmitChanges();
}

关于c# - 具有数据库生成的属性的 SubmitChanges 上的 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862688/

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