gpt4 book ai didi

c# - 如何在linq to sql中插入

转载 作者:行者123 更新时间:2023-11-30 18:02:51 25 4
gpt4 key购买 nike

我在插入时遇到了两个表的问题。表创建如下:

我有一个表“Page”,它与另一个表“Content”有关系,因此 FK“Page”属于“Content”

当我插入一个新内容时,表“Page”上已经有一个索引,我想放入“Content”中,意识到为什么表扫描选择“Page”正确的行。问题在于是时候获取 InsertOnSubmit 内容了。它还会自动在“页面”上创建一个新索引。

有人有什么想法吗?

最佳答案

由于 Page 实体与 Content 实体具有一对多的关系,因此每个 Page 有很多 Contents,每个 Content 只属于 One Page,所以页面实体必须有一个内容列表,并且内容实体必须有一个类型为 Page 的属性,它表示页面引用而不是外键 PageId,所以你没有不需要检索页面的 id 以添加新内容,如下所示:

[Table]
public class Page
{
...
private EntitySet<Content> _contents;
[Association(Storage = "_contents", ThisKey = "Id", OtherKey = "PageId")]
public EntitySet<Content> Contents
{
get { return _contents; }
set { _contents.Assign(value); }
}
...
}

对于内容实体:

[Table]
public class Content
{
...
[Column]
int PageId{ get; set; }
EntityRef<Page> _page;
[Association(Storage = "_page", ThisKey = "PageId",
OtherKey = "Id", IsForeignKey = true)]
public Page Page
{
get { return _page.Entity; }
set { _page.Entity = value; }
}
}

每当你需要插入一个新内容时,你必须像这样传递一个页面引用:

 Page pageReference = //Get By its id or whatever
//or
Page pageReference = new Page { Id = 1, name = " ",....};
Repository.Add( new Content{ Id = 1,...,Page = pageReference });

请注意:add 方法只是对实体执行InserOnSubmit

因此,无论何时您想要插入新内容,您都可以附加任何页面或仅从页面实体而不是从内容添加任何新页面,并且您不需要检索页面的 id 来告诉'em 将包含此内容的页面是什么,只需将关系定义为对象关系而不是外键。

关于c# - 如何在linq to sql中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815352/

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