如何在C#WebCore实体框架中获取其他实体

时间:2018-02-06 16:58:46

标签: c# entity-framework

我有一个C#WebCore REST服务,它与前端通信并将实体框架用于CRUD到数据库中。这使用依赖注入在启动时添加上下文:

services.AddDbContext<FileCacheContext>(options => options.UseSqlServer(Settings.ConnectionSetting));
services.AddDbContext<FileImportContext>(options => options.UseSqlServer(Settings.ConnectionSetting));

我所拥有的功能允许用户上传文件,该文件由服务器操纵,并且该文件的某些属性将返回到前端。上传的文件缓存在数据库中(FileCacheContext)。

经过一段时间后,用户现在希望确认他们的操作并将文件从Cache(FileCacheContext)“提升”到Import(FileImportContext);这是通过前端中包含缓存文件ID的操作完成的。

此参数传递给另一个REST控制器,该控制器使用FileImport上下文而不是FileCache上下文调用:

public PromoteController(FileImportContext context)
{
    _context = context;
}

[HttpPost]
public void Post([FromBody] int fileCacheId)
{
...

我现在需要做的是将这个缓存的文件从一个“上下文”“移动”到另一个“上下文”,类似于:

var cachedFile = _context.FileCache.Where(f => f.FileCacheId == cachedFileId).FirstOrSingle();
var importedFile = new FileImport() { FileData = cachedFile.FileData };
_context.FileImport.Add(importedFile);
_context.SaveChanges();

我的问题是我只能看到一个上下文,所以无法读取或写入其他上下文。

两个基础表没有任何关系,所以我无法以任何方式链接它们以基于另一个加载它们。

如何在EF中访问另一个(不相关的)上下文?

1 个答案:

答案 0 :(得分:0)

所以为了回答我自己的问题,我发现我当然可以包含实例化控制器时所需的其他上下文:

public PromoteController(FileImportContext contextImport, FileCacheContext contextCache)
{
    _contextImport = contextImport;
    _contextCache = contextCache;
}

然后根据需要使用这些。

这不是感觉就像正确的方式一样,但如果它有效,它就有效......