Я использую сущность framework 7 и создал два проекта. Один проект как проект ASP.NET 5 Web API, а другой - проект библиотеки классов (пакет), в котором я хотел сохранить всю логику уровня доступа к данным. Таким образом, я могу использовать этот пакет для другого проекта отчетности в будущем и другие дополнительные услуги, которые я могу сделать.Как вы правильно определяете DBContext в проекте библиотеки классов?
В принципе, у меня есть простой пост в моем контроллере веб-проекта api, который вызывает функцию в моем проекте библиотеки данных. Когда функция инициирует базу данных, она заявляет, что база данных не определена, даже если она определена в обоих проектах.
ОШИБКА
{"No database providers are configured. Configure a database provider by overriding OnConfiguring in your DbContext class or in the AddDbContext method when setting up services."}
КОД
данных проекта Библиотека: InsertPerson
public int InsertPerson(tbl_Person person)
{
using (var db = new AppContext())
{
try
{
db.tbl_Person.Add(person);
db.SaveChanges();
return person.PersonID;
}
catch
{
return 0;
}
}
}
ФАЙЛЫ КОНФИГУРАЦИИ
Web API проекта: Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<AppContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<AppContext>();
services.AddMvc();
}
Web API проекта: appsettings.json
{
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=localhost;Database=testDB;Trusted_Connection=True;MultipleActiveResultSets=true"
}
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Verbose",
"System": "Information",
"Microsoft": "Information"
}
}
}
Web API проект: project.json
{
"userSecretsId": "blah,
"version": "1.0.0-rc1-final",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"DataLibrary": "",
"Microsoft.AspNet.Authentication.OAuthBearer": "1.0.0-beta7",
"Microsoft.AspNet.Http.Abstractions": "1.0.0-rc1-final",
"Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Remotion.Linq": "2.0.1"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},
"frameworks": {
"dnx451": { },
"dnxcore50": { }
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
данные проект Библиотека: Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<AppContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<AppContext>();
services.AddMvc();
}
данные проект Библиотеки: AppSettings. json
{
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=localhost;Database=testDB;Trusted_Connection=True;MultipleActiveResultSets=true"
}
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Verbose",
"System": "Information",
"Microsoft": "Information"
}
}
}
Проект библиотеки данных: AppContext.cs
namespace DataLibrary
{
public class AppContext : IdentityDbContext<ApplicationUser>
{
public DbSet<tbl_Person> tbl_Person { get; set; }
public static AppContext Create()
{
return new AppContext();
}
protected override void OnModelCreating(ModelBuilder builder)
{
new tbl_PersonMap(builder.Entity<tbl_Person>());
base.OnModelCreating(builder);
}
}
}
Вы пытались сохранить строку подключения в App.Config? –
@VijayKumbhoje config работает, иначе база данных не была бы создана, когда я запустил базу данных dnx ef update в проекте Data Library. Из того, что я видел до сих пор, я думаю, что мне нужно выяснить, как ввести настройки контекста из веб-api startup в функцию. Если я работаю только в библиотеке данных, это работает, когда проект веб-ави является проектом запуска, который он сбой – chris
вы видели этот учебник? http://www.jerriepelser.com/blog/moving-entity-framework-7-models-to-external-project –