EntityFramework,在添加到表时获取对象ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EntityFramework,在添加到表时获取对象ID相关的知识,希望对你有一定的参考价值。

我有个问题。我以这种方式将对象添加到我的表:

this.db.Objects.Add(new Object  Text = "someText", Number = number );

然后,我想将第二个对象添加到另一个与Objects表相关的表中(表名是Objects3

this.db.Objects3.Add(new Object3  ObjectId = ?, Property = "text" );

如何获得qazxsw poi(表中的Id是qazxsw poi类型)仅基于Object的属性?

表看起来像这样:

Object.Id
答案

您实际上不需要ID值来创建两个实体之间的关系,这是ORM对导航属性的支持变得方便的地方:

int

EF应该注意到您的导航属性在另一端有一个对象,并按正确的顺序保存到数据库,并相应地设置两个ID。

但是,如果您坚持以明确的方式获取ID,则应首先保存更改,以便在对象中设置ID

public class Object

    [Key]
    public int Id  get; set; 

    [ForeignKey("Object2")]
    public int Object2Id  get; set; 
    public Object2 Object2  get; set; 

    public string Text  get; set; 
    public int Number  get; set; 

    public List<Object3> Objects3  get; set; 


public class Object3

    [Key]
    public int Id  get; set; 

    [ForeignKey("Object")]
    public int ObjectId  get; set; 
    public Object Object  get; set; 

    public string Property  get; set; 

现在,您可以明确地使用您的ID。

旁注 - 您的导航属性缺少var o1 = new Object() ... var o3 = new Object3() ... o3.Object = o1; this.db.Objects3.Add( o3 ); this.db.SaveChanges(); 修饰符,这将使EF无法用对于在对数据库执行查询时实现的对象的延迟加载替换默认实现。

var o1 = new Object()  ...
this.db.Objects.Add( o1 );

this.db.SaveChanges(); 

var id = o1.ID;

以上是关于EntityFramework,在添加到表时获取对象ID的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery:将查询结果保存到表时找不到数据集

从给定数据库中选择所有表时,如何将 [dbo] 前缀附加到表名?

将行添加到 Access 表时生成一个序号(每组)

Azure Synapse Polybase/外部表 - 我们可以在创建外部表时从文件中获取行号吗

如何将总和添加到表中并获取 R 中每个单元格的比例

使用 sqlbulktools 更新表时对列值求和