2017-06-15 43 views
0

我在我的解决方案中添加了一个新的ASP.NET核心Web应用程序(Web API)项目。通过另一个项目.NET Core中的参考实体框架

我明白我不能在这个项目中使用EF6,但我想知道是否有办法让另一个项目(使用.NET Framework)完成这项工作并将数据传回给该项目。 NET核心项目。

这是我的代码:

。控制器(.NET核心)

[Route("api/[controller]")] 
public class ValuesController : Controller 
{ 
    [HttpGet] 
    public UserDto Get(Int32 id) 
    { 
     Models.UserDto user = UserHelper.Get(id); 

     if (user == null) 
      throw new Exception(); 

     return user; 
    } 
} 

。助手(.NET核心)

public class UserHelper 
{ 
    public static UserDto Get(int id) 
    { 
     User user = UserController.Get(id); 
     return Map(user); 
    } 

    private static UserDto Map(User user) 
    { 
     if (user == null) 
      return null; 

     UserDto dto = new UserDto(); 
     dto.Id = user.ID; 
     dto.Lastname = user.LastName; 
     dto.Firstname = user.FirstName; 
     dto.Email = user.Email; 
     dto.Username = user.Username; 
     dto.PhoneNumber = user.PhoneNumber; 
     dto.CustomerId = user.CustomerID; 
     return dto; 
    } 
} 

。控制器(.NET Framework)的

public static User Get(int id, UserStateCriteria criteria) 
    { 
     InputCheckerHelper.CheckNull<UserStateCriteria>(criteria, "criteria"); 

     using (NContext uow = new NContext()) 
     { 
      var query = uow.Users 
          .Include(u => u.ConsoleUsers) 
          .Include(u => u.Devices) 
          .Include(u => u.Culture) 
          .Include(u => u.Product) 
          .Include(u => u.Customer) 
          .Include(u => u.ProductCredentials.Select(pc => pc.Database.DatabaseConnector)) 
          .Include(u => u.ProductCredentials.Select(pc => pc.Database.DatabaseConnector.Methods.Select(m => m.Headers))) 
          .Include(u => u.ProductCredentials.Select(pc => pc.Database.DatabaseConnector.Methods.Select(m => m.Parsers))) 
          .Include(u => u.ProductCredentials.Select(pc => pc.Database.DatabaseConnector.Methods.Select(m => m.ConfigurableConnectorFieldRenamings))) 
          .Include(u => u.ProductCredentials.Select(pc => pc.Database.DatabaseConnector.Methods.Select(m => m.ConfigurableConnectorErrorMappings))) 
          .Include(u => u.Subscription.Edition) 
          .Where(u => u.ID == id); 

      query = ApplyStateCriteriaOnQuery(criteria, query); 

      return query.FirstOrDefault(); 
     } 
    } 

我有搜索白白SO和其他网站的类似地雷的情况下,但它不是非常有帮助。

我只是要求在这里,因为在微软的网站it says

使用实体框架6在ASP.NET核心应用的推荐方法是放在一个类库项目的EF6背景和模型类以整个框架为目标。

但引用我的BLL和DAL项目后,我得到:

System.IO.FileNotFoundException: 'Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. The system cannot find the file specified.'

+0

您是否已经在您的MVC应用程序和类库中引用了完整的.Net框架?你有检查你的nuget包和版本等? –

+0

EntityFramework v6.1.3安装在两个引用的项目上,并且它们作为''>存在于我的.csproj目录中。 – Superslinky

+0

没有项目文件很难猜测出现了什么问题。你是否检查过微软的示例解决方案? https://github.com/aspnet/Docs/tree/master/aspnetcore/data/entity-framework-6/sample –

回答

1

你可以,如果只有一个,如果你的核心应用程序实际上是在完整的框架运行,以及。原因很简单,你不能从一个非完整的框架项目中引用一个完整的框架库。 API足迹不相同。

然而,即使你运行在完整的框架上,你仍然必须有一个单独的项目(例如一个类库)来实际存放你的上下文和迁移。这是因为您需要使用EF6的PMC命令与Core项目不兼容。