错误TS2305:模块没有导出成员(error TS2305: Module has no exported member)
我正在做一个打字稿文件中的两个导入:
import { DOCUMENT } from '@angular/platform-browser'; import { Positioning } from '@ng-bootstrap/ng-bootstrap';
第一个语句有效,但是编译器抱怨第二个语句(ng-bootstrap import):
src/app/extensions/angular-calendar/directives/calendarTooltip.directive.ts(19,10): error TS2305: Module '"/Users/gg/OneDrive/Studies/Node/timely-frontend/node_modules/@ng-bootstrap/ng-bootstrap/index"' has no exported member 'Positioning'.
我已经知道我安装了ng-bootstrap。 我不确定这可能是什么原因造成的。
以下是我的tsconfig.json文件:
{ "compilerOptions": { "outDir": "build/app", "target": "es5", "module": "system", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": false, "noImplicitAny": false }, "exclude": [ "gulpfile.ts", "node_modules" ] }
我安装的ng-bootstrap:
gg:timely-frontend gaurav$ tree node_modules/@ng-bootstrap/ng-bootstrap node_modules/@ng-bootstrap/ng-bootstrap ├── README.md ├── accordion │ ├── accordion-config.d.ts │ ├── accordion-config.js │ ├── accordion-config.js.map │ ├── accordion-config.metadata.json │ ├── accordion.d.ts │ ├── accordion.js │ ├── accordion.js.map │ ├── accordion.metadata.json │ ├── accordion.module.d.ts │ ├── accordion.module.js │ ├── accordion.module.js.map │ └── accordion.module.metadata.json ├── alert │ ├── alert-config.d.ts │ ├── alert-config.js │ ├── alert-config.js.map │ ├── alert-config.metadata.json │ ├── alert.d.ts │ ├── alert.js │ ├── alert.js.map │ ├── alert.metadata.json │ ├── alert.module.d.ts │ ├── alert.module.js │ ├── alert.module.js.map │ └── alert.module.metadata.json ├── bundles │ ├── ng-bootstrap.js │ └── ng-bootstrap.js.map ├── buttons │ ├── radio.d.ts │ ├── radio.js │ ├── radio.js.map │ ├── radio.metadata.json │ ├── radio.module.d.ts │ ├── radio.module.js │ ├── radio.module.js.map │ └── radio.module.metadata.json ├── carousel │ ├── carousel-config.d.ts │ ├── carousel-config.js │ ├── carousel-config.js.map │ ├── carousel-config.metadata.json │ ├── carousel.d.ts │ ├── carousel.js │ ├── carousel.js.map │ ├── carousel.metadata.json │ ├── carousel.module.d.ts │ ├── carousel.module.js │ ├── carousel.module.js.map │ └── carousel.module.metadata.json ├── collapse │ ├── collapse.d.ts │ ├── collapse.js │ ├── collapse.js.map │ ├── collapse.metadata.json │ ├── collapse.module.d.ts │ ├── collapse.module.js │ ├── collapse.module.js.map │ └── collapse.module.metadata.json ├── datepicker │ ├── datepicker-config.d.ts │ ├── datepicker-config.js │ ├── datepicker-config.js.map │ ├── datepicker-config.metadata.json │ ├── datepicker-day-template-context.d.ts │ ├── datepicker-day-template-context.js │ ├── datepicker-day-template-context.js.map │ ├── datepicker-day-view.d.ts │ ├── datepicker-day-view.js │ ├── datepicker-day-view.js.map │ ├── datepicker-day-view.metadata.json │ ├── datepicker-i18n.d.ts │ ├── datepicker-i18n.js │ ├── datepicker-i18n.js.map │ ├── datepicker-i18n.metadata.json │ ├── datepicker-input.d.ts │ ├── datepicker-input.js │ ├── datepicker-input.js.map │ ├── datepicker-input.metadata.json │ ├── datepicker-month-view.d.ts │ ├── datepicker-month-view.js │ ├── datepicker-month-view.js.map │ ├── datepicker-month-view.metadata.json │ ├── datepicker-navigation-select.d.ts │ ├── datepicker-navigation-select.js │ ├── datepicker-navigation-select.js.map │ ├── datepicker-navigation-select.metadata.json │ ├── datepicker-navigation.d.ts │ ├── datepicker-navigation.js │ ├── datepicker-navigation.js.map │ ├── datepicker-navigation.metadata.json │ ├── datepicker-service.d.ts │ ├── datepicker-service.js │ ├── datepicker-service.js.map │ ├── datepicker-service.metadata.json │ ├── datepicker-view-model.d.ts │ ├── datepicker-view-model.js │ ├── datepicker-view-model.js.map │ ├── datepicker-view-model.metadata.json │ ├── datepicker.d.ts │ ├── datepicker.js │ ├── datepicker.js.map │ ├── datepicker.metadata.json │ ├── datepicker.module.d.ts │ ├── datepicker.module.js │ ├── datepicker.module.js.map │ ├── datepicker.module.metadata.json │ ├── ngb-calendar.d.ts │ ├── ngb-calendar.js │ ├── ngb-calendar.js.map │ ├── ngb-calendar.metadata.json │ ├── ngb-date-parser-formatter.d.ts │ ├── ngb-date-parser-formatter.js │ ├── ngb-date-parser-formatter.js.map │ ├── ngb-date-struct.d.ts │ ├── ngb-date-struct.js │ ├── ngb-date-struct.js.map │ ├── ngb-date.d.ts │ ├── ngb-date.js │ └── ngb-date.js.map ├── dropdown │ ├── dropdown-config.d.ts │ ├── dropdown-config.js │ ├── dropdown-config.js.map │ ├── dropdown-config.metadata.json │ ├── dropdown.d.ts │ ├── dropdown.js │ ├── dropdown.js.map │ ├── dropdown.metadata.json │ ├── dropdown.module.d.ts │ ├── dropdown.module.js │ ├── dropdown.module.js.map │ └── dropdown.module.metadata.json ├── index.d.ts ├── index.js ├── index.js.map ├── index.metadata.json ├── modal │ ├── modal-backdrop.d.ts │ ├── modal-backdrop.js │ ├── modal-backdrop.js.map │ ├── modal-backdrop.metadata.json │ ├── modal-container.d.ts │ ├── modal-container.js │ ├── modal-container.js.map │ ├── modal-container.metadata.json │ ├── modal-dismiss-reasons.d.ts │ ├── modal-dismiss-reasons.js │ ├── modal-dismiss-reasons.js.map │ ├── modal-dismiss-reasons.metadata.json │ ├── modal-ref.d.ts │ ├── modal-ref.js │ ├── modal-ref.js.map │ ├── modal-ref.metadata.json │ ├── modal-stack.d.ts │ ├── modal-stack.js │ ├── modal-stack.js.map │ ├── modal-stack.metadata.json │ ├── modal-window.d.ts │ ├── modal-window.js │ ├── modal-window.js.map │ ├── modal-window.metadata.json │ ├── modal.d.ts │ ├── modal.js │ ├── modal.js.map │ ├── modal.metadata.json │ ├── modal.module.d.ts │ ├── modal.module.js │ ├── modal.module.js.map │ └── modal.module.metadata.json ├── package.json ├── pagination │ ├── pagination-config.d.ts │ ├── pagination-config.js │ ├── pagination-config.js.map │ ├── pagination-config.metadata.json │ ├── pagination.d.ts │ ├── pagination.js │ ├── pagination.js.map │ ├── pagination.metadata.json │ ├── pagination.module.d.ts │ ├── pagination.module.js │ ├── pagination.module.js.map │ └── pagination.module.metadata.json ├── popover │ ├── popover-config.d.ts │ ├── popover-config.js │ ├── popover-config.js.map │ ├── popover-config.metadata.json │ ├── popover.d.ts │ ├── popover.js │ ├── popover.js.map │ ├── popover.metadata.json │ ├── popover.module.d.ts │ ├── popover.module.js │ ├── popover.module.js.map │ └── popover.module.metadata.json ├── progressbar │ ├── progressbar-config.d.ts │ ├── progressbar-config.js │ ├── progressbar-config.js.map │ ├── progressbar-config.metadata.json │ ├── progressbar.d.ts │ ├── progressbar.js │ ├── progressbar.js.map │ ├── progressbar.metadata.json │ ├── progressbar.module.d.ts │ ├── progressbar.module.js │ ├── progressbar.module.js.map │ └── progressbar.module.metadata.json ├── rating │ ├── rating-config.d.ts │ ├── rating-config.js │ ├── rating-config.js.map │ ├── rating-config.metadata.json │ ├── rating.d.ts │ ├── rating.js │ ├── rating.js.map │ ├── rating.metadata.json │ ├── rating.module.d.ts │ ├── rating.module.js │ ├── rating.module.js.map │ └── rating.module.metadata.json ├── tabset │ ├── tabset-config.d.ts │ ├── tabset-config.js │ ├── tabset-config.js.map │ ├── tabset-config.metadata.json │ ├── tabset.d.ts │ ├── tabset.js │ ├── tabset.js.map │ ├── tabset.metadata.json │ ├── tabset.module.d.ts │ ├── tabset.module.js │ ├── tabset.module.js.map │ └── tabset.module.metadata.json ├── timepicker │ ├── ngb-time-struct.d.ts │ ├── ngb-time-struct.js │ ├── ngb-time-struct.js.map │ ├── ngb-time.d.ts │ ├── ngb-time.js │ ├── ngb-time.js.map │ ├── timepicker-config.d.ts │ ├── timepicker-config.js │ ├── timepicker-config.js.map │ ├── timepicker-config.metadata.json │ ├── timepicker.d.ts │ ├── timepicker.js │ ├── timepicker.js.map │ ├── timepicker.metadata.json │ ├── timepicker.module.d.ts │ ├── timepicker.module.js │ ├── timepicker.module.js.map │ └── timepicker.module.metadata.json ├── tooltip │ ├── tooltip-config.d.ts │ ├── tooltip-config.js │ ├── tooltip-config.js.map │ ├── tooltip-config.metadata.json │ ├── tooltip.d.ts │ ├── tooltip.js │ ├── tooltip.js.map │ ├── tooltip.metadata.json │ ├── tooltip.module.d.ts │ ├── tooltip.module.js │ ├── tooltip.module.js.map │ └── tooltip.module.metadata.json ├── typeahead │ ├── highlight.d.ts │ ├── highlight.js │ ├── highlight.js.map │ ├── highlight.metadata.json │ ├── typeahead-config.d.ts │ ├── typeahead-config.js │ ├── typeahead-config.js.map │ ├── typeahead-config.metadata.json │ ├── typeahead-window.d.ts │ ├── typeahead-window.js │ ├── typeahead-window.js.map │ ├── typeahead-window.metadata.json │ ├── typeahead.d.ts │ ├── typeahead.js │ ├── typeahead.js.map │ ├── typeahead.metadata.json │ ├── typeahead.module.d.ts │ ├── typeahead.module.js │ ├── typeahead.module.js.map │ └── typeahead.module.metadata.json └── util ├── popup.d.ts ├── popup.js ├── popup.js.map ├── positioning.d.ts ├── positioning.js ├── positioning.js.map ├── triggers.d.ts ├── triggers.js ├── triggers.js.map ├── util.d.ts ├── util.js ├── util.js.map └── util.metadata.json 18 directories, 287 files
I am doing following two imports in a typescript file:
import { DOCUMENT } from '@angular/platform-browser'; import { Positioning } from '@ng-bootstrap/ng-bootstrap';
First statement works however compiler complains about the second statement (ng-bootstrap import):
src/app/extensions/angular-calendar/directives/calendarTooltip.directive.ts(19,10): error TS2305: Module '"/Users/gg/OneDrive/Studies/Node/timely-frontend/node_modules/@ng-bootstrap/ng-bootstrap/index"' has no exported member 'Positioning'.
I have checeked that I have ng-bootstrap installed. I am not sure what could be possible cause for this.
Following is my tsconfig.json file:
{ "compilerOptions": { "outDir": "build/app", "target": "es5", "module": "system", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": false, "noImplicitAny": false }, "exclude": [ "gulpfile.ts", "node_modules" ] }
My installed ng-bootstrap:
gg:timely-frontend gaurav$ tree node_modules/@ng-bootstrap/ng-bootstrap node_modules/@ng-bootstrap/ng-bootstrap ├── README.md ├── accordion │ ├── accordion-config.d.ts │ ├── accordion-config.js │ ├── accordion-config.js.map │ ├── accordion-config.metadata.json │ ├── accordion.d.ts │ ├── accordion.js │ ├── accordion.js.map │ ├── accordion.metadata.json │ ├── accordion.module.d.ts │ ├── accordion.module.js │ ├── accordion.module.js.map │ └── accordion.module.metadata.json ├── alert │ ├── alert-config.d.ts │ ├── alert-config.js │ ├── alert-config.js.map │ ├── alert-config.metadata.json │ ├── alert.d.ts │ ├── alert.js │ ├── alert.js.map │ ├── alert.metadata.json │ ├── alert.module.d.ts │ ├── alert.module.js │ ├── alert.module.js.map │ └── alert.module.metadata.json ├── bundles │ ├── ng-bootstrap.js │ └── ng-bootstrap.js.map ├── buttons │ ├── radio.d.ts │ ├── radio.js │ ├── radio.js.map │ ├── radio.metadata.json │ ├── radio.module.d.ts │ ├── radio.module.js │ ├── radio.module.js.map │ └── radio.module.metadata.json ├── carousel │ ├── carousel-config.d.ts │ ├── carousel-config.js │ ├── carousel-config.js.map │ ├── carousel-config.metadata.json │ ├── carousel.d.ts │ ├── carousel.js │ ├── carousel.js.map │ ├── carousel.metadata.json │ ├── carousel.module.d.ts │ ├── carousel.module.js │ ├── carousel.module.js.map │ └── carousel.module.metadata.json ├── collapse │ ├── collapse.d.ts │ ├── collapse.js │ ├── collapse.js.map │ ├── collapse.metadata.json │ ├── collapse.module.d.ts │ ├── collapse.module.js │ ├── collapse.module.js.map │ └── collapse.module.metadata.json ├── datepicker │ ├── datepicker-config.d.ts │ ├── datepicker-config.js │ ├── datepicker-config.js.map │ ├── datepicker-config.metadata.json │ ├── datepicker-day-template-context.d.ts │ ├── datepicker-day-template-context.js │ ├── datepicker-day-template-context.js.map │ ├── datepicker-day-view.d.ts │ ├── datepicker-day-view.js │ ├── datepicker-day-view.js.map │ ├── datepicker-day-view.metadata.json │ ├── datepicker-i18n.d.ts │ ├── datepicker-i18n.js │ ├── datepicker-i18n.js.map │ ├── datepicker-i18n.metadata.json │ ├── datepicker-input.d.ts │ ├── datepicker-input.js │ ├── datepicker-input.js.map │ ├── datepicker-input.metadata.json │ ├── datepicker-month-view.d.ts │ ├── datepicker-month-view.js │ ├── datepicker-month-view.js.map │ ├── datepicker-month-view.metadata.json │ ├── datepicker-navigation-select.d.ts │ ├── datepicker-navigation-select.js │ ├── datepicker-navigation-select.js.map │ ├── datepicker-navigation-select.metadata.json │ ├── datepicker-navigation.d.ts │ ├── datepicker-navigation.js │ ├── datepicker-navigation.js.map │ ├── datepicker-navigation.metadata.json │ ├── datepicker-service.d.ts │ ├── datepicker-service.js │ ├── datepicker-service.js.map │ ├── datepicker-service.metadata.json │ ├── datepicker-view-model.d.ts │ ├── datepicker-view-model.js │ ├── datepicker-view-model.js.map │ ├── datepicker-view-model.metadata.json │ ├── datepicker.d.ts │ ├── datepicker.js │ ├── datepicker.js.map │ ├── datepicker.metadata.json │ ├── datepicker.module.d.ts │ ├── datepicker.module.js │ ├── datepicker.module.js.map │ ├── datepicker.module.metadata.json │ ├── ngb-calendar.d.ts │ ├── ngb-calendar.js │ ├── ngb-calendar.js.map │ ├── ngb-calendar.metadata.json │ ├── ngb-date-parser-formatter.d.ts │ ├── ngb-date-parser-formatter.js │ ├── ngb-date-parser-formatter.js.map │ ├── ngb-date-struct.d.ts │ ├── ngb-date-struct.js │ ├── ngb-date-struct.js.map │ ├── ngb-date.d.ts │ ├── ngb-date.js │ └── ngb-date.js.map ├── dropdown │ ├── dropdown-config.d.ts │ ├── dropdown-config.js │ ├── dropdown-config.js.map │ ├── dropdown-config.metadata.json │ ├── dropdown.d.ts │ ├── dropdown.js │ ├── dropdown.js.map │ ├── dropdown.metadata.json │ ├── dropdown.module.d.ts │ ├── dropdown.module.js │ ├── dropdown.module.js.map │ └── dropdown.module.metadata.json ├── index.d.ts ├── index.js ├── index.js.map ├── index.metadata.json ├── modal │ ├── modal-backdrop.d.ts │ ├── modal-backdrop.js │ ├── modal-backdrop.js.map │ ├── modal-backdrop.metadata.json │ ├── modal-container.d.ts │ ├── modal-container.js │ ├── modal-container.js.map │ ├── modal-container.metadata.json │ ├── modal-dismiss-reasons.d.ts │ ├── modal-dismiss-reasons.js │ ├── modal-dismiss-reasons.js.map │ ├── modal-dismiss-reasons.metadata.json │ ├── modal-ref.d.ts │ ├── modal-ref.js │ ├── modal-ref.js.map │ ├── modal-ref.metadata.json │ ├── modal-stack.d.ts │ ├── modal-stack.js │ ├── modal-stack.js.map │ ├── modal-stack.metadata.json │ ├── modal-window.d.ts │ ├── modal-window.js │ ├── modal-window.js.map │ ├── modal-window.metadata.json │ ├── modal.d.ts │ ├── modal.js │ ├── modal.js.map │ ├── modal.metadata.json │ ├── modal.module.d.ts │ ├── modal.module.js │ ├── modal.module.js.map │ └── modal.module.metadata.json ├── package.json ├── pagination │ ├── pagination-config.d.ts │ ├── pagination-config.js │ ├── pagination-config.js.map │ ├── pagination-config.metadata.json │ ├── pagination.d.ts │ ├── pagination.js │ ├── pagination.js.map │ ├── pagination.metadata.json │ ├── pagination.module.d.ts │ ├── pagination.module.js │ ├── pagination.module.js.map │ └── pagination.module.metadata.json ├── popover │ ├── popover-config.d.ts │ ├── popover-config.js │ ├── popover-config.js.map │ ├── popover-config.metadata.json │ ├── popover.d.ts │ ├── popover.js │ ├── popover.js.map │ ├── popover.metadata.json │ ├── popover.module.d.ts │ ├── popover.module.js │ ├── popover.module.js.map │ └── popover.module.metadata.json ├── progressbar │ ├── progressbar-config.d.ts │ ├── progressbar-config.js │ ├── progressbar-config.js.map │ ├── progressbar-config.metadata.json │ ├── progressbar.d.ts │ ├── progressbar.js │ ├── progressbar.js.map │ ├── progressbar.metadata.json │ ├── progressbar.module.d.ts │ ├── progressbar.module.js │ ├── progressbar.module.js.map │ └── progressbar.module.metadata.json ├── rating │ ├── rating-config.d.ts │ ├── rating-config.js │ ├── rating-config.js.map │ ├── rating-config.metadata.json │ ├── rating.d.ts │ ├── rating.js │ ├── rating.js.map │ ├── rating.metadata.json │ ├── rating.module.d.ts │ ├── rating.module.js │ ├── rating.module.js.map │ └── rating.module.metadata.json ├── tabset │ ├── tabset-config.d.ts │ ├── tabset-config.js │ ├── tabset-config.js.map │ ├── tabset-config.metadata.json │ ├── tabset.d.ts │ ├── tabset.js │ ├── tabset.js.map │ ├── tabset.metadata.json │ ├── tabset.module.d.ts │ ├── tabset.module.js │ ├── tabset.module.js.map │ └── tabset.module.metadata.json ├── timepicker │ ├── ngb-time-struct.d.ts │ ├── ngb-time-struct.js │ ├── ngb-time-struct.js.map │ ├── ngb-time.d.ts │ ├── ngb-time.js │ ├── ngb-time.js.map │ ├── timepicker-config.d.ts │ ├── timepicker-config.js │ ├── timepicker-config.js.map │ ├── timepicker-config.metadata.json │ ├── timepicker.d.ts │ ├── timepicker.js │ ├── timepicker.js.map │ ├── timepicker.metadata.json │ ├── timepicker.module.d.ts │ ├── timepicker.module.js │ ├── timepicker.module.js.map │ └── timepicker.module.metadata.json ├── tooltip │ ├── tooltip-config.d.ts │ ├── tooltip-config.js │ ├── tooltip-config.js.map │ ├── tooltip-config.metadata.json │ ├── tooltip.d.ts │ ├── tooltip.js │ ├── tooltip.js.map │ ├── tooltip.metadata.json │ ├── tooltip.module.d.ts │ ├── tooltip.module.js │ ├── tooltip.module.js.map │ └── tooltip.module.metadata.json ├── typeahead │ ├── highlight.d.ts │ ├── highlight.js │ ├── highlight.js.map │ ├── highlight.metadata.json │ ├── typeahead-config.d.ts │ ├── typeahead-config.js │ ├── typeahead-config.js.map │ ├── typeahead-config.metadata.json │ ├── typeahead-window.d.ts │ ├── typeahead-window.js │ ├── typeahead-window.js.map │ ├── typeahead-window.metadata.json │ ├── typeahead.d.ts │ ├── typeahead.js │ ├── typeahead.js.map │ ├── typeahead.metadata.json │ ├── typeahead.module.d.ts │ ├── typeahead.module.js │ ├── typeahead.module.js.map │ └── typeahead.module.metadata.json └── util ├── popup.d.ts ├── popup.js ├── popup.js.map ├── positioning.d.ts ├── positioning.js ├── positioning.js.map ├── triggers.d.ts ├── triggers.js ├── triggers.js.map ├── util.d.ts ├── util.js ├── util.js.map └── util.metadata.json 18 directories, 287 files
原文:https://stackoverflow.com/questions/40619638
最满意答案
两种选择:
最简单的
添加一个属性到控制器来保存你的
DbContext
,然后添加一个将填充的无参数ctor(有效地给它一个控制器的生命周期)。 例如public class MyController : Controller { private readonly DbContext context; public MyController() { this.context = new DbContext(); } // rest of actions reference `context.<whatever>` }
更多地参与
使用某种形式的依赖注入器(DI)将控制反转(IoC)引入等式。 然后,让解析器在实例化时将上下文放在控制器中。 然后,新的控制器签名如下所示:
public class MyController : Controller { private readonly DbContext context; public MyController(DbContext context) { this.context = context; } // rest of actions reference `context.<whatever>` }
注意:无参数ctor消失了,但是DependencyResolver会在创建控制器时自动插入正确的实例。
从那里,您需要声明DI配置中的哪个实例。 以ninject为例,类似于:
kernel.Bind<DbContexT>().To<MyDbContext>() // here's where scope comes in to play: // for ninject: https://github.com/ninject/ninject/wiki/Object-Scopes //.InTransientScope(); //.InSingletonScope(); //.InThreadScope(); //.InRequestScope();
Fixed by adding some workarounds. Added code below:
Model.context.cs:
public MyDatabaseContext() : base("name=MyDatabaseContextEntities") { } public MyDatabaseContext(string connectionString) : base("name=MyDatabaseContextEntities") { this.Database.Connection.ConnectionString = connectionString; }
Controller:
public static string temporaryConnectionString { get; set; } FbConnectionStringBuilder fbBuilder = new FbConnectionStringBuilder() { //code to build your connection }; //connectionString defined as a public variable connectionString = fbBuilder.ToString(); //store to session variable in your DAL context.DataConnection.DAL.CurrentConnection = connectionString; temporaryConnectionString = connectionString; context = new MyDatabaseContext(connectionString); return View();
相关问答
更多-
两种选择: 最简单的 添加一个属性到控制器来保存你的DbContext ,然后添加一个将填充的无参数ctor(有效地给它一个控制器的生命周期)。 例如 public class MyController : Controller { private readonly DbContext context; public MyController() { this.context = new DbContext(); } // rest of actio ...
-
以下是生命周期的视图: http://www.flickr.com/photos/60896767@N00/89101625/sizes/l/ 是的,他们被线程/请求共享 你应该写它们是线程安全的。 他们应该是无国籍的 通常他们有一个引用Spring服务的工作。 控制器处理Web层的绑定,验证和路由。 Here's a view of the lifecycle: http://www.flickr.com/photos/60896767@N00/89101625/sizes/l/ Yes, they're ...
-
你可以选择这样的DB名称: public class MyDataContext : DbContext { public MyDataContext() : base("MyDatabaseName") { Database.DefaultConnectionFactory = new SqlConnectionFactory(myConnectionString); } } You could choose the name of the DB like th ...
-
如何在类库项目中正确定义DBContext?(How do you define DBContext properly in a Class Library Project?)[2022-07-17]
看起来您在示例代码中的问题是您正在新建AppContext实例而不是从ServiceProvider解析它。 以这种方式初始化DbContext时,将为上下文隐式创建一个新的ServiceProvider,并且该上下文不会满足Startup.cs中的任何配置。 如果您在OnConfiguring中配置上下文并且对应用程序的其余部分中的依赖项注入不感兴趣,那么这是您希望使用的模式。 在这种情况下,我希望您通过构造函数注入获取AppContext。 对于这种解决方案,您还需要在ServiceCollection ... -
您不应该为所有控制器使用相同的dbContext。 这样做不是一个好习惯,因为框架必须跟踪更多实体,如果EF方面出现问题,那么调试也很困难。 每个控制器类使用一个dbContext。 You should not have the same dbContext for all controllers. It is not a good practice to do so because that way the framework has to track a lot more entities and i ...
-
150实体不是一个巨大的DbContext,但它高于EF在第一个DbContext的初始化中开始出现性能问题的大小。 如果您可以在逻辑上将实体分成负责区域(称为有界上下文),那么您可以考虑使用多个DbContext。 此外,您的应用是否需要使用所有这些实体? 如果没有,您可以简化一些事情。 另请注意,您需要至少EF6才能有效地工作,以前版本的Entity Framework存在多个上下文的问题。 使用多个上下文时也必须小心。 许多人遇到麻烦是因为他们从一个上下文中获取实体,然后在另一个上下文中调用保存更改, ...
-
我认为这个问题与在IoC容器中注册类型有关。 您使用的是什么IoC容器? 你如何注册CMSDataContext? 也许你应该在AutoFac中使用像InstancePerRequest这样的东西? I think that problem is related to registering types in IoC container. What IoC container are you using? How do you register CMSDataContext? Maybe you shoul ...
-
一个与(One Vs. Mutiple DbContext in one project)[2021-06-24]
您需要两个单独的连接字符串和连接,因此请使用两个不同的上下文,并根据另一个上下文的结果查询一个上下文。 You would need two separate connection strings and connections, so use two different contexts and query one based on the results from the other. -
ASP.NET Core基于依赖注入,因为你的上下文已经添加到你的dependendy容器中,当你的控制器被实例化时,它会被框架自动注入。 根据评论进行编辑: 你可以设置你的类来支持DI,假设你有两个类。 一种依赖于你的上下文,然后依赖于你的上下文和你的第一类: public class MyClass { private ApplicationDbContext _context; public MyClass(ApplicationDbContext context) { ...
-
答案很简单: var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); var context = new PMSContext(optionsBuilder.Options); User user = new UserFactory(context).Create(WindowsIden ...