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] 前缀附加到表名?