如何在linq中插入sql

本文关键字:插入 sql linq | 更新日期: 2023-09-27 18:11:43

我在插入时有两个表的问题。表的创建方法如下:

我有一个与另一个表"Content"有关系的表"Page",因此FK"Page"落在"Content"中

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

有人有什么想法吗?

如何在linq中插入sql

Page实体有一个一对多关系Content实体,因此每个页面有很多内容和每个内容属于只有一个页面,这个页面实体必须有一个列表的内容必须有一个属性的类型和内容实体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); }
    }
    ...
}

Content实体:

[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来告诉他们哪个页面会有这个内容只要将关系定义为对象关系而不是外键

是的,你需要更好地解释这一点,但如果我理解正确的话,你创建了一个页面内的内容。这里的关键是创建页面,检索其ID,然后向该页添加内容。