我使用Entity Framework Core 2存储在数据库中的模型的整数主键。我需要检查模型的主键是否是Entity Framework分配的最终值,或者它是否具有&已经分配了#39;我还没有找到有关此用途的确切值的文档,所以我想确认一下我的猜测:
这是对的吗?
答案 0 :(得分:2)
不确定您需要该信息的位置和原因。但EF Core提供了两种有用的方法。
首先是EntityEntry.IsKeySet属性:
获取一个值,该值指示是否已为此实体的键值赋值。
对于具有存储生成属性的键(例如映射到Identity列),如果任何存储生成的属性具有CLR默认值,则返回值将为false。
对于没有任何存储生成属性的键,返回值将始终为true,因为任何值都被视为有效键值。
虽然这基本上与您的假设逻辑相同,但在可能的情况下使用它而不是您自己的硬编码逻辑会更好:
context.Entry(entity).IsKeySet
第二个是PropertyEntry.IsTemporary属性:
获取或设置一个值,该值指示此属性的值是否被视为临时值,该值将在调用
SaveChanges()
时由存储生成的值替换。
例如,EF Core会在将实体插入数据库之前为标识列生成临时值,并在此之后用实际值替换它们。如果您需要知道值是否为最终值,则可以使用此属性。
context.Entry(entity).Property(e => e.Id).IsTemprorary