环境
我在Framework 4.0上使用Entity Framework 5.(这意味着我实际上使用的是EF 4.4).作为实体我使用STE(自我跟踪实体)因为我在N-Tier应用程序中工作.我们使用数据库驱动的方法,因为EF是在游戏后期引入的.
上下文
我有两个实体,彼此都有一个导航属性.(EntityA具有EntityB的导航属性,EntityB具有EntityA的导航属性).关系是'EntityA> One-To-Many> EntityB'.当我想通过LINQ表达式加载子实体时,我需要使用INCLUDE(STE => Eager Loading),因为我将通过几个层传递所有数据.
代码
这是我的代码,用它的EntityB孩子调用EntityA.
using (var ctx = new MyEntities())
{
var result = (from s in ctx.EntityA.Include("EntityB")
where s.Id = 11111
orderby s.TimeUpdated descending
select s)
.Take(10)
.ToList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
错误
System.StackOverflowException {无法计算表达式,因为当前线程处于堆栈溢出状态.}
删除'INCLUDE'时没有错误.我想原因很简单.我想加载带有子记录EntityB的EntityA,EntityB记录每次都要加载其父EntityA,而EntityA ......我想每个人都理解这里的无限循环.
我的解决方案或替代品
这个问题
在我的情况下,有更好的替代方法或方法来解决这个问题吗 我应该继续提出我提出的替代方案吗?因为我希望有一个更好,更清洁的解决方案.
我感谢你的时间
伊恩
环境
模型

代码片段中的模型
public class MainEntity
{
public long Id { get; set; }
public virtual Collection<ChildEntity> ChildEntities { get; set; }
}
public class ChildEntity
{
public long Id { get; set; }
public MainEntity ParentMainEntity { get; set; }
public virtual Collection<ChildEntity> ChildEntities { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
注意:ChildEntity只有一层深的ChildEntities可以作为孩子.
问题
我能够坚持这个模型.这似乎工作正常.只有一个问题.当我存储ChildEntity具有父ChildEntity.该MainEntity_id字段为空,只有ParentChildEntityId设置.我希望始终设置MainEntity_Id字段的原因是用于性能查询.
如何强制MAINENTITY_ID字段始终在更深层次设置值?
c# entity-framework ef-code-first .net-4.5 entity-framework-6
我很好奇内联元素属性事件的内容是如何在幕后工作的。
我们从一个简单的函数开始
function handler(e) {
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
用例 1
如果我们想将此处理程序添加到我们的按钮,我们可以这样做:
<button onclick="handler();">Click Me</button>
Run Code Online (Sandbox Code Playgroud)
单击哪个日志: undefined
公平地说,我们在不传递参数的情况下调用了一个函数。
用例 2
如果我们现在将按钮更改为将event用作参数:
<button onclick="handler(event);">Click Me</button>
Run Code Online (Sandbox Code Playgroud)
我们登录点击: MouseEvent{ ... }
现在我们记录事件,正如我们所期望的
用例 3
但是如果我们只指定函数名呢?
<button onclick="handler">Click Me</button>
Run Code Online (Sandbox Code Playgroud)
没发生什么事!,我希望只是给一个函数的引用,就可以了。因此,当“onlick”发生时,将使用正确的事件参数调用引用的函数。
用例 4
当我们在 javascript 中添加处理程序时:
const btn = document.getElementById('btn');
btn.onclick = handler;
Run Code Online (Sandbox Code Playgroud)
它可以工作,捕获事件并记录相关event对象。
结束语
无论我们传递给onclick=""内联的任何文本/内容/语句,它基本上都eval()在上面运行吗?当我们在 javascript ( btn.onclick = ...) 中附加它时,它会通过适当的过程来拦截事件,然后调用有界处理函数并通过它传递相应的事件对象(例如MouseEvent)?
快速笔记
需要明确的是,这是一个信息丰富的问题,要了解基本原理,而不管它被认为是好的还是坏的做法。目前不讨论这一点。