【发布时间】:2015-07-31 11:07:31
【问题描述】:
我正在开发一个 asp.net mvc5 Web 应用程序 + 我正在使用 EF6.0。有时我无法理解 EF 如何在内部处理事情。例如,我有两个实体命名;技术和机架。其中Technology.TechnologyID 是系统生成的ID,而Rack.RackID 是用户定义的密钥,将=Technology.TechnologyID.。所以我有以下方法来添加新技术,然后添加新机架并分配Rack.RackID 等于系统生成的Technology.TechnologyID。
Technology technology = new Technology
{
IsCompleted = false,
IsDeleted = true,
TypeID = technologyypeID,
Tag = "CAB" + max.ToString(),
PartialTag = max,
StartDate = DateTime.Now,
IT360ID = dbresource.RESOURCEID,//,,
IsManaged = rj.Technology == null ? true : rj.Technology.IsManaged
};
rj.Rack.RackID = technology.TechnologyID;
SAVE():
现在开始时我虽然上面的我不起作用,因为当我尝试时:-
rj.Rack.RackID = technology.TechnologyID;
此时 TechnologyID 将不可用,并且使用 VS 我发现在运行时 TechnologyID 将等于零:-
所以我不确定 EF 如何处理这个问题?并且它强制 Rack.RackID 等于 Technology.TechnologyID ,尽管在运行时技术 ID 将为零。这是从 sql profiler 生成的 sql 语句:-
exec sp_executesql N'insert [dbo].[Racks]([RackID], [DataCenterID], [ZoneID], [IT360SiteID])
values (@0, @1, @2, @3)
select [timestamp]
from [dbo].[Racks]
where @@ROWCOUNT > 0 and [RackID] = @0',N'@0 int,@1 int,@2 int,@3 bigint',@0=128,@1=3,@2=2,@3=4
不确定128 在运行时是如何分配的,尽管值为零?
【问题讨论】:
-
EF 很可能知道这些关系,因此如果您通过普通对象引用属性链接了对象,EF 知道在将父对象插入数据库后从何处检索 ID。
-
@LasseV.Karlsen 你能在这方面提供更多建议吗?虽然这是 EF 的一个很棒的特性,但它是如何发生这种神奇的完全令人困惑?
-
不,我不能,我没有足够的 EF 经验,这只是一个想法,其他人将不得不验证它或说我错了(已知偶尔发生:))
标签: c# asp.net sql-server entity-framework entity-framework-6