2017-06-15 65 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項目不兼容。