C# 如何将现有实体附加到generic中的实体框架上下文?

C# 如何将现有实体附加到generic中的实体框架上下文?,c#,entity-framework,generics,entity-framework-6,C#,Entity Framework,Generics,Entity Framework 6,我想在EntityFramework6中加载一个带有AsNoTracking和LazyLoadingEnabled=false的实体。在某些特殊情况下,我希望显式重新加载一些集合。如何显式加载分离实体的集合 我正在寻找一个通用选项,将现有实体附加到上下文 我的电话是这样的: var myCar=wait this.myCarRepositoryAccessor.GetById(this.UnitOfWork,1)、configurewait(false); LoadCollection(myCa

我想在EntityFramework6中加载一个带有AsNoTracking和
LazyLoadingEnabled=false的实体。在某些特殊情况下,我希望显式重新加载一些集合。如何显式加载分离实体的集合

我正在寻找一个通用选项,将现有实体附加到上下文

我的电话是这样的:

var myCar=wait this.myCarRepositoryAccessor.GetById(this.UnitOfWork,1)、configurewait(false);
LoadCollection(myCar,e=>e.Driver);
DataRepository中的GetById如下所示:

public任务GetById(int-id)
{
返回id==0
?Task.FromResult(默认值(强度))
:this.Context.InternalSet().AsNoTracking()?.SingleOrDefaultAsync(p=>p.Id==Id);
}
UnitOfWork中的LoadCollection看起来像:

public void LoadCollection(tenty实体,Expression navigationProperty)其中tenty:class,ienty其中TElement:class
{
//this.context.Entry(entity.State=EntityState.Unchanged
this.context.Entry(entity).Collection(navigationProperty).Load();
}
我已尝试将实体状态设置为
未更改
,但收到以下错误消息:

附加“MyCar”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”


我想这是因为
AsNoTracking()
,显式加载无法使用它

如果要使用显式加载,应该将其从getbyid方法中删除

还请注意,您可以将字符串与集合一起使用,因此,如果要加载多个导航,只需使用字符串或字符串列表,而无需附加func

还应该知道,对于集合,您使用集合;对于单个实体导航,您应该使用引用


最好的方法是将另一个参数添加到getbyid字符串列表中,并包括该列表中的所有字符串,因为include也接受字符串

加载集合之前是否尝试附加实体?e、 g.
this.context.Set().Attach(实体)我只想在某些特殊情况下重新加载集合。如果我在之前给出它,它会工作。对不起,我不明白你在说什么。我想以延迟方式加载集合。是的,我的代码允许你这样做。