Вопросы с тегами [entity-framework]

0

голосов
0

ответ
6

Просмотры

Linq, EF Ядро - группы на одном поле и использовать другое поле, чтобы получить список данных из другой таблицы

Кто-нибудь может мне помочь. Я попробовал все, ничего не получалось. У меня есть данные в этом формате table1 Id T_Id 4 2 6 5 6 7 table2 T_Id Fname LNAME 2 мэри кузнец 5 Джон Поуп 7 стив Блер Я хочу, чтобы получить данные в следующем формате, используя Linq запрос с EF Core. [{ "Идентификатор": "4", "пользователи": [{ "T_Id": 2, "имя_файла": "мэри", "LNAME": "Смит"}]}, { "Идентификатор": "6", "пользователи": [{ "T_Id": 5, "имя_файла": "Джон", "LNAME": "папа"}, { "T_Id": 7, "имя_файла": "стив", "LNAME": «Blair "}]}]
Shamal
1

голосов
2

ответ
1.6k

Просмотры

Do I use Snapshot file, migration file or data annotations in my EF Core to update database?

Я пытаюсь понять различные типы путей миграции можно выбрать при разработке 1.0 приложения ASP.NET ядро ​​с EF Core. Когда я создал свое первое приложение Core, я заметил, что создается класс ApplicationDbContextModelSnapshot, который использует ModelBuilder для построения модели. Потом я прочитал, что если мне нужно добавить таблицу в базу данных, мне нужно, чтобы создать новую модель и запустить командную строку для создания файла миграции и обновления базы данных. Хорошо, я его до этого момента. Но когда я делаю это, я заметил, что класс ApplicationDbContextModelSnapshot обновляется тоже. 1) Означает ли это, что я не могу изменить этот класс ApplicationDbContextModelSnapshot, так как он выглядит, как он получает регенерируется каждый раз? 2) Должен ли я использовать аннотации данных, чтобы построить свою модель или я должен использовать Fluent API, который говорит мне построить свою модель в классе ApplicationDbContext? А? другой файл, который строит модель? Я вижу три различных способа работы с базой данных здесь, класс снимка, аннотации данных, а также свободно API. Я запутался, потому что сегодня, я сделал ошибку в моем последней миграции файл, так что я удалил файл, отбросил базу данных и перезапустил обновление базы данных. Но, делая это, я получил ошибки, похожие на: Индекс «IX_Transaction_GiftCardId» зависит от столбца «GiftCardId». ALTER TABLE ALTER COLUMN GiftCardId не удалась, так как один или несколько объектов, доступ к этому колонку. Поэтому, естественно, мне было интересно, если я должен был изменить класс ApplicationDbContextModelSnapshot. Какой путь я должен принимать, когда речь идет о миграции или обновление базы данных, потому что эти три пути путают меня.
Ray
1

голосов
1

ответ
1.6k

Просмотры

System.OutOfMemoryException Entity Framework 6 for db.SaveChanges

Я бег пакетного задания вставки событий в базу данных с рамкой сущности. Общий размер варьируется, но около 3500000 событий являются нормальными. Этот список разделен на группы 60-500k событий, которые затем добавляются в базу данных. Однако, когда около одного миллиона событий, которые были добавлены я System.OutOfMemoryException и придется начинать все сначала. Таким образом, для завершения программы она должна быть запущена 3-4 раза в настоящее время. Как очистить свой объект дб после SaveChanges () вызывался так что это не будет? общественный DbSet Событие {получить; задавать; } ... вар groupedList = list.GroupBy (х => x.Import.FileName); вар дБ = новый ApplicationDbContext (); Еогеасп (вар группа в groupedList) {db.Events.AddRange (группа); db.SaveChanges (); } Стек след: System.OutOfMemoryException: Исключение типа «System.OutOfMemoryException» был брошен. в System.Data.Entity.
Ogglas
1

голосов
2

ответ
4.1k

Просмотры

эф ядро ​​миграции данных вставки

Я хотел бы вставить данные в таблицу миграции. Является ли это возможным? Миграция нуждается в конструктор без параметров доступен, и я хотел бы использовать дб контекст, определенный в Startup.cs файл (лучше всего я хотел бы получить его Повсеместно инъекции зависимостей). Как это сделать?
Marek
1

голосов
2

ответ
37

Просмотры

Запись отношение один к одному, используя Fluent API

Как написать один-к-одному - отношения или нул с использованием свободно апи? Может кто-то помочь мне исправить то, что я написал. Я не уверен, если его правильно. Сценарий: Один студент может иметь один или нулевой адрес. Студент модели общественного ИНТ Id {получить; задавать; } Публичная строка Name {получить; задавать; } Общественности Адрес Адрес {получить; задавать; } Адрес модели общественного Int Id {получить; задавать; } Публичная строка Street {получить; задавать; } Общественного ИНТ StudentId {получить; задавать; } Общественности Студент {получить; задавать; } То, что я пробовал: builder.HasOne (и => u.Address) .WithOne (б => b.Student) .HasForeignKey (б => b.StudentId);
Illep
1

голосов
3

ответ
60

Просмотры

Как я пишу Foreach получить так же результат, как мой запрос?

У меня есть подобный код: Список BankDepositHistoryDTOs = новый список (); для (INT I = 0; г <query.Count, я ++) {BankDepositHistoryDTO Ь = новый BankDepositHistoryDTO (); b.AccountId = запрос [я] .AccountId; b.Id = запрос [я] .id; b.Amount = запрос [я] .Amount; b.AdditionalData = запрос [я] .AdditionalData; b.ClientIp = запрос [я] .ClientIp; b.Gateway = запрос [я] .Gateway; b.PaymentRefNumber = запрос [я] .PaymentRefNumber; b.ReturnUrl = запрос [я] .ReturnUrl; b.State = запрос [я] .State; b.Uuid = запрос [я] .Uuid; BankDepositHistoryDTOs.Add (б); } Мне было интересно, если я могу получить его с петлей Еогеаспа. Это возможно ?
Ali Eshghi
1

голосов
1

ответ
1.1k

Просмотры

Значение EF Выберите MAX, который

Я не могу понять, как с помощью EF, чтобы выбрать DB строку, на основе максимального значения, но которым меньше или равна 5. Вот мой код, но это будет выбрать только значение, а не всю строку: Цены PR = дб. Prices.Where (ы => s.numdays s.numdays) Спасибо за ваше время!
CodeDemen
1

голосов
1

ответ
58

Просмотры

Entity Framework - отображение один класс двух таблиц с многими одним соотношением

У меня есть класс, который представляет собой соединение страницы и тег, и это выглядит более или менее, как это: общественный класс TagLink {[Key] общественное ИНТ Id {получить; задавать; } Общественного ИНТ PageId {получить; задавать; } Общественного ИНТ TagID {получить; задавать; } Публичная строка TagName {получить; задавать; }} В моей базе данных я хотел бы иметь 2 таблицу: TagLinks и тэги. Первый из них с Id, PageId и TagID, а второй с TagID и тэгу. Я хотел бы, идентификатор метки, чтобы быть внешним ключом так много ссылок тегов могут быть отнесены к одному имени тега. Я дал ему попробовать с EntityTypeConfiguration, но я не знаю, как настроить его правильно. Это дает мне неправильные внешние ключи, которые построены так: ALTER TABLE [DBO] [тэги] обратное ADD CONSTRAINT [FK_dbo.TagNames_dbo.TagLinks_TagId] FOREIGN KEY ([TagID]) ЛИТЕРАТУРА [DBO] [TagLinks] ([TagID.. ]); ALTER TABLE [DBO]. [Тэги] ПРОВЕРКА CONSTRAINT [FK_dbo.TagNames_dbo.TagLinks_TagId] Я начал с этим: классом TagLinkEntityConfiguration общественности: EntityTypeConfiguration {общественного TagLinkEntityConfiguration () {HasKey (е => e.Id); HasKey (е => e.TagId); Свойство (е => e.Id) .HasColumnName (nameof (TagLink.Id)); Свойство (е => e.PageId) .HasColumnName (nameof (TagLink.PageId)); Свойство (е => e.TagId) .HasColumnName (nameof (TagLink.TagId)); Свойство (е => e.TagName) .HasColumnName (nameof (TagLink.TagName)); Карта (м => {m.Properties (е => новый {e.Id, e.PageId, e.TagId}); m.ToTable ( "TagLinks");}); Карта (т => {т. Свойства (е => новый {e.TagId, e.TagName}); m.ToTable ( "тэги"); }); }} Как заставить его работать с многими одним соотношением? Я предполагаю, что внешний ключ должен быть добавлен на таблицу TagLinks ссылаться код TagId в тэгах таблицы
krajol
1

голосов
0

ответ
57

Просмотры

Один или несколько внешних ключей свойств не является обнуляемым EF6

Я пытался некоторое время, чтобы увидеть, где недостаток в методе, который я создал, что обновления (включая Add) объект и его детей с помощью Entity Framework 6.0. Я смотрел на все другие вопросы SO, и я не в состоянии увидеть, где я неправильно. У меня есть Entity продукта, который может иметь список детей, и эти дети могут иметь список детей. Вот мой Entity продукт общественного частичного класса продукта {[System.Diagnostics.CodeAnalysis.SuppressMessage ( "Microsoft.Usage", "CA2214: DoNotCallOverridableMethodsInConstructors")] общественный продукт () {ProductSizes = новый HashSet (); } Общественного ИНТ Id {получить; задавать; } [Требуется] [StringLength (100)] публичная строка Name {получить; задавать; } Общественного ИНТ? PortfolioId {получить; задавать; } Общественного BOOL IsActive {получить; задавать; } Общественного ИНТ CreatedBy {получить; задавать; } Общественного DateTime? CreatedDate {получить; задавать; } Общественного ИНТ UpdatedBy {получить; задавать; } Общественного DateTime? UpdatedDate {получить; задавать; } // Это поиск объект, который содержит 1: 1 отношение общественности виртуального Портфолио {получить; задавать; } // Это поиск объект, который содержит 1: 1 отношение общественности виртуального пользователя CreatedByUser {получить; задавать; } // Это поиск объект, который содержит 1: 1 отношение общественности виртуального пользователя UpdatedByUser {получить; задавать; } [System.Diagnostics.CodeAnalysis.SuppressMessage ( "Microsoft.Usage", "CA2227: CollectionPropertiesShouldBeReadOnly")] общественное ProductSizes виртуальных ICollection {получить; задавать; }} Продукт может иметь много детей ProductSize общественный частичный класс ProductSize {[System.Diagnostics.CodeAnalysis. SuppressMessage ( "Microsoft.Usage", "CA2214: DoNotCallOverridableMethodsInConstructors")] общественность ProductSize () {ProductPackages = новый HashSet (); } Общественного ИНТ Id {получить; задавать; } [ForeignKey ( "Продукт")] общественность ИНТ PRODUCTID {получить; задавать; } Общественного ИНТ? CanSizeId {получить; задавать; } [StringLength (50)] общественная строка CanUPC {получить; задавать; } Общественного ИНТ CreatedBy {получить; задавать; } Общественного DateTime? CreatedDate {получить; задавать; } Общественного ИНТ UpdatedBy {получить; задавать; } Общественного DateTime? UpdatedDate {получить; задавать; } Общественного BOOL IsActive {получить; задавать; } // Это поиск объект, который содержит 1: 1 отношение общественности виртуальной CanSize CanSize {получить; задавать; } [System.Diagnostics.CodeAnalysis.SuppressMessage ( "Microsoft.Usage", «CA2227: } [StringLength (50)] общественная строка CarrierCode {получить; задавать; } Общественного ИНТ? Sapid {получить; задавать; } [StringLength (50)] общественная строка CaseUPCSupplierPack {получить; задавать; } Общественного ИНТ CreatedBy {получить; задавать; } Общественного DateTime? CreatedDate {получить; задавать; } Общественного ИНТ UpdatedBy {получить; задавать; } Общественного DateTime? UpdatedDate {получить; задавать; } Общественного BOOL IsActive {получить; задавать; } // Это поиск объект, который содержит 1: 1 отношение общественности виртуальной PackageSize PackageSize {получить; задавать; } // Это поиск объект, который содержит 1: 1 отношение общественности виртуального пользователя CreatedByUser {получить; задавать; } // Родитель ProductSize общественной виртуальная ProductSize ProductSize {получить; задавать; } // Это поиск объект, который содержит 1: 1 отношение общественности виртуального пользователя UpdatedByUser {получить; задавать; }} Я, чем есть метод, который принимает продукт и обновления, а также добавлять любые объекты вниз цепь, если это необходимо. общественного недействительными UpdateProduct (продукт, внутр идентификатор пользователя) {вар originalProduct = GetAllProductEntities () Где (а => a.Id == product.Id) .SingleOrDefault (). вар prouctEntry = _dbContext.Entry (originalProduct); prouctEntry.CurrentValues.SetValues ​​(NewProduct); Еогеасп (размер вар в newProduct.ProductSizes) {вар originalSize = originalProduct.ProductSizes.Where (а => a.Id == size.Id) .SingleOrDefault (); если (! originalSize = NULL) {вар sizeEntry = _dbContext.Entry (originalSize); sizeEntry.CurrentValues.SetValues ​​(размер); } Еще {// Нет -> Это новый дочерний элемент -> Вставить size.Id = 0; originalProduct.ProductSizes.Add (размер); } Еогеасп (вар пакет в size.ProductPackages) {вар originalPackage = originalSize.ProductPackages.Where (а => a.Id == package.Id) .SingleOrDefault (); если (originalPackage! = NULL) {вар packageEntry = _dbContext.Entry (originalPackage); packageEntry.CurrentValues.SetValues ​​(пакет); } Еще {// Нет -> Это новый дочерний элемент -> Вставить package.Id = 0; originalSize.ProductPackages.Add (пакет); }}} _DbContext.SaveChanges (); } После SaveChanges () вызывается, я получаю это System.InvalidOperationException «Сбой операции: Отношения не могут быть изменены, так как один или несколько внешних ключей свойств не является обнуляемым. При внесении изменений в отношениях, связанный с ним свойство внешнего ключа устанавливается в нулевое значение. Если иностранный ключ не поддерживает нулевые значения, должны быть определены новые отношения, иностранный ключ свойство должно быть присвоено другое ненулевое значение, или несвязанный объект должен быть удален. Как уже говорилось, я прочитал большинство SO вопрос / ответов относительно этого, и я считаю, что это проблема с моей модели, но я теряюсь, как к тому, что это может быть. Эта модель была сгенерирована из существующей БД, так что если есть проблема с моей схемой я могу изменить, что хорошо. Я могу предоставить дополнительные фрагменты кода, а также в случае необходимости. связанное с этим внешним ключом свойство устанавливаются в нулевое значение. Если иностранный ключ не поддерживает нулевые значения, должны быть определены новые отношения, иностранный ключ свойство должно быть присвоено другое ненулевое значение, или несвязанный объект должен быть удален. Как уже говорилось, я прочитал большинство SO вопрос / ответов относительно этого, и я считаю, что это проблема с моей модели, но я теряюсь, как к тому, что это может быть. Эта модель была сгенерирована из существующей БД, так что если есть проблема с моей схемой я могу изменить, что хорошо. Я могу предоставить дополнительные фрагменты кода, а также в случае необходимости. связанное с этим внешним ключом свойство устанавливаются в нулевое значение. Если иностранный ключ не поддерживает нулевые значения, должны быть определены новые отношения, иностранный ключ свойство должно быть присвоено другое ненулевое значение, или несвязанный объект должен быть удален. Как уже говорилось, я прочитал большинство SO вопрос / ответов относительно этого, и я считаю, что это проблема с моей модели, но я теряюсь, как к тому, что это может быть. Эта модель была сгенерирована из существующей БД, так что если есть проблема с моей схемой я могу изменить, что хорошо. Я могу предоставить дополнительные фрагменты кода, а также в случае необходимости. Я прочитал большинство SO вопроса / ответов относительно этого, и я считаю, что это проблема с моей моделью, но я теряюсь, как к тому, что это может быть. Эта модель была сгенерирована из существующей БД, так что если есть проблема с моей схемой я могу изменить, что хорошо. Я могу предоставить дополнительные фрагменты кода, а также в случае необходимости. Я прочитал большинство SO вопроса / ответов относительно этого, и я считаю, что это проблема с моей моделью, но я теряюсь, как к тому, что это может быть. Эта модель была сгенерирована из существующей БД, так что если есть проблема с моей схемой я могу изменить, что хорошо. Я могу предоставить дополнительные фрагменты кода, а также в случае необходимости.
Isaac Levin
1

голосов
0

ответ
150

Просмотры

Повышение производительности с помощью Entity Framework 6 скомпилирован запросов

Из Составитель запросы документации: Начиная с .NET Framework 4.5, LINQ запросы кэшируются автоматически. Тем не менее, вы все еще можете использовать скомпилированные запросы LINQ, чтобы уменьшить эти затраты в последующих казней и скомпилированных запросов может быть более эффективным, чем LINQ запросов, которые автоматически кэшируются. Обратите внимание, что LINQ к Entities запросов, которые применяют оператор Enumerable.Contains в памяти коллекции автоматически не кэшируются. Также параметрирования в памяти коллекции в скомпилированных запросов LINQ не допускается. Так это значит, что LINQ запросы в Entity Framework 6.x еще нужно перевести на реальных команд SQL на лету? и может быть улучшена с классом CompiledQuery? Спасибо
user3723486
1

голосов
1

ответ
407

Просмотры

Entity Inheritance in DDD

I am trying to design a Domain Model of an E-Commerce system using DDD guidelines. I have a situation where I have 2 different types of Products. One product is "Item" and the other product is "Package" (Group/Bundle of Items). My domain model so far looks like this public abstract class Product : IAggregateRoot { public string ProductId { get; protected set; } // Many to Many relationship between Item and Package protected List ItemPackages => new List(); protected List Images => new List(); // Other properties shared between Item and Package } public class Item : Product { // All properties and methods specific to Item public void SetImages(List images) { // Set images for Item has its own business logic // Example: number of allowed images, size of image etc } } public class Package : Product { // All properties and method related to package public void SetImages(List images) { // Set images for Package has its own business logic // Exampe: number of allowed images, size of image etc } } All the behavior is defined inside Item and Package class and Product class just has shared properties. Initially I was thinking to create 2 complete separate Aggregate roots (Item and Package) and no Product entity. The only reason I need Product is because of the Unique ProductId in the system. And all the relationship with other entities (like Images) needs to based on ProductId. I am not 100% confident what I am designing is correct and need some input here. Creating a Base entity just to share some properties is against any principle of DDD? Is there anything else you guys would suggest to improve the design of my Domain Model? Thanks very much in advance.
nafr1
1

голосов
3

ответ
503

Просмотры

Как построить строку соединения из существующего соединения для новой базы данных, созданных динамически?

У меня есть запрос, чтобы динамически создать базу данных. частная пустота ExecuteNonQuery (строка SQL) {используя (вар соединение = новый SqlConnection (_connectionString)) {connection.Open (); SqlCommand команда = connection.CreateCommand (); command.CommandText = SQL; command.ExecuteNonQuery (); }} Частный недействительным CreateDatabase (строка Databasename) {попробуйте {ExecuteNonQuery ($ "CREATE DATABASE {Databasename}"); } Поймать (Exception е) {певд Exception ($ "Невозможно создать базу данных '{Databasename}'"); }} База данных будет создана с использованием моего существующего соединения, но мне нужно, чтобы создать строку подключения для этой новой базы данных для запуска миграции и для различных других целей. Как это возможно ? Дополнение Ее на самом деле для целей, где пользователи могут заполнить форму, чтобы создать новую базу данных, где они могут дать существующую строку подключения или если они не имеют одну руку мы строим это для них
Sachin
1

голосов
0

ответ
190

Просмотры

Невозможно добавить миграцию в Entity Framework

Добавлено новое поле RegisterViewModel: [Требуется] [Display (Name = "Name")] общественная строка Name {получить; задавать; } Добавлено в AccountController: если (ModelState.IsValid) {вар пользователь = новый ApplicationUser {UserName = model.Email, электронная почта = model.Email, Name = model.Name}; Результат переменная = ждут UserManager.CreateAsync (пользователь, model.Password); если (result.Succeeded) {Await SignInManager.SignInAsync (пользователь, isPersistent: ложь, rememberBrowser: ложный); вернуться RedirectToAction ( "Index", "Начало"); } AddErrors (результат); } Теперь я хочу создать файл перенос, с помощью команды надстройки миграции newFieldName VS создает файл, но он пуст. общественный класс newFieldName частичный: DbMigration {общественного переопределение аннулируются Up () {} общественного переопределения недействительным вниз () {}} Обновление: ApplicationUser класс общественного класса ApplicationUser: IdentityUser {[Требуется] публичная строка Name {получить; задавать; } Общественных асинхронной Task GenerateUserIdentityAsync (менеджер UserManager) {вар UserIdentity = ждут manager.CreateIdentityAsync (это, DefaultAuthenticationTypes.ApplicationCookie); вернуться UserIdentity; }} Общественного класса ApplicationDbContext: IdentityDbContext {общественного ApplicationDbContext (): базовый ( "DefaultConnection", throwIfV1Schema лжи) {} открытый статический ApplicationDbContext Create () {возвратить новый ApplicationDbContext (); }} IdentityUser {[Требуется] публичная строка Name {получить; задавать; } Общественных асинхронной Task GenerateUserIdentityAsync (менеджер UserManager) {вар UserIdentity = ждут manager.CreateIdentityAsync (это, DefaultAuthenticationTypes.ApplicationCookie); вернуться UserIdentity; }} Общественного класса ApplicationDbContext: IdentityDbContext {общественного ApplicationDbContext (): базовый ( "DefaultConnection", throwIfV1Schema лжи) {} открытый статический ApplicationDbContext Create () {возвратить новый ApplicationDbContext (); }} IdentityUser {[Требуется] публичная строка Name {получить; задавать; } Общественных асинхронной Task GenerateUserIdentityAsync (менеджер UserManager) {вар UserIdentity = ждут manager.CreateIdentityAsync (это, DefaultAuthenticationTypes.ApplicationCookie); вернуться UserIdentity; }} Общественного класса ApplicationDbContext: IdentityDbContext {общественного ApplicationDbContext (): базовый ( "DefaultConnection", throwIfV1Schema лжи) {} открытый статический ApplicationDbContext Create () {возвратить новый ApplicationDbContext (); }} CreateIdentityAsync (это, DefaultAuthenticationTypes.ApplicationCookie); вернуться UserIdentity; }} Общественного класса ApplicationDbContext: IdentityDbContext {общественного ApplicationDbContext (): базовый ( "DefaultConnection", throwIfV1Schema лжи) {} открытый статический ApplicationDbContext Create () {возвратить новый ApplicationDbContext (); }} CreateIdentityAsync (это, DefaultAuthenticationTypes.ApplicationCookie); вернуться UserIdentity; }} Общественного класса ApplicationDbContext: IdentityDbContext {общественного ApplicationDbContext (): базовый ( "DefaultConnection", throwIfV1Schema лжи) {} открытый статический ApplicationDbContext Create () {возвратить новый ApplicationDbContext (); }}
Maksims
1

голосов
1

ответ
2.1k

Просмотры

Change tracking in Entity Framework Core 2.0 changed my code behavior

Этот код работает отлично в Entity Framework 1.0 также может быть 1.1. вар pupilFound = ждут context.Pupils.SingleOrDefaultAsync (р => p.Id == pupil.Id); если (pupilFound == NULL) {певд BadDataException ($ "{nameof (pupil.Id)} не является действительным"); } Если (! PupilFound.UserId = идентификатор пользователя) {певд NotAuthorizedException (); } Pupil.UserId = идентификатор пользователя; context.Entry (ученик) .State = EntityState.Modified; ждут contextSaveChangesAsync (); Теперь с Entity Framework Ядра 2.0 Я получил это исключение с ошибкой: Не может быть отслежены, так как другой экземпляр этого типа с тем же ключом уже отслеживаются Быстрое исправление будет: вар pupilFound = ждут context.Pupils.AsNoTracking.SingleOrDefaultAsync (р = > p.Id == pupil.Id); Таким образом, отслеживание отключено, но что поражения цели методы AsNoTracking относительно официальной рекомендации: https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.changetracking.changetracker.querytrackingbehavior?view=efcore-2.0 Отключения отслеживания изменений полезно только для чтения сценариев, поскольку это позволяет избежать // накладных настройки отслеживания изменений для каждого экземпляра объекта. Вы должны // не отключить отслеживание изменений, если вы хотите управлять экземплярами объектов и сохраняются // этих изменений в базу данных с помощью Microsoft.EntityFrameworkCore.DbContext.SaveChanges Как еще обновят ученик со всеми его свойствами приходят от клиента? 0 Отключение отслеживания изменений полезно только для чтения сценариев, поскольку это позволяет избежать // накладных настройки отслеживания изменений для каждого экземпляра объекта. Вы должны // не отключить отслеживание изменений, если вы хотите управлять экземплярами объектов и сохраняются // этих изменений в базу данных с помощью Microsoft.EntityFrameworkCore.DbContext.SaveChanges Как еще обновят ученик со всеми его свойствами приходят от клиента? 0 Отключение отслеживания изменений полезно только для чтения сценариев, поскольку это позволяет избежать // накладных настройки отслеживания изменений для каждого экземпляра объекта. Вы должны // не отключить отслеживание изменений, если вы хотите управлять экземплярами объектов и сохраняются // этих изменений в базу данных с помощью Microsoft.EntityFrameworkCore.DbContext.SaveChanges Как еще обновят ученик со всеми его свойствами приходят от клиента?
HelloWorld
1

голосов
0

ответ
67

Просмотры

разрешения Refresh пользователя после удалены из роли

У меня есть проект, где я могу назначить пользователям роли. Моя проблема заключается в том, что при удалении пользователя из роли, пользователь сможет получить доступ к ресурсам, которые он не loger должен видеть. Единственный способ, чтобы обновить его разрешения, когда он выйти и снова войти в систему. Это проблема, потому что, когда я хочу, чтобы остановить пользователь от доступа к конфиденциальным данным, я не могу это сделать, потому что рамки кэшировать его разрешение. Разрешения не будут обновляться, даже если перезапустить приложение. Есть ли способ, чтобы очистить пользователь кэшированных разрешения, когда я удалить его из роли или когда я добавляю его в ролях?
pitaridis
1

голосов
0

ответ
581

Просмотры

Дразнящий ToListAsync на Mock с помощью Moq

У меня есть метод, который преобразует список в DbSet, который я использую, когда насмешливый данные моего контекст базы данных должен вернуться. Например: MockedDatabaseContext.Setup (и => u.SomeTable) .Returns (GetDbSet (LISTOFITEMS)); Однако метод, который я пытаюсь написать модульный тест для использует метод ToListAsync в одной точке для преобразования из IQueryable в список. Есть ли способ, используя структуру MOq, чтобы сделать установку на вызов метода ToListAsync? Я попытался это: dbSet.Setup (г => d.ToListAsync (CancellationToken.None)) Возвращает ((Task) Task.CompletedTask);. Но это бросает «ThrowIfSetupExpressionInvolvesUnsupportedMember» исключение на строку выше.
Jeroen
1

голосов
2

ответ
105

Просмотры

What is the best way to search data on multiple fields [duplicate]

Этот вопрос уже есть ответ здесь: Динамический, где положение (или) в Linq к Entities 2 ответов я работаю в ASP.NET MVC, у меня есть сценарий, где пользователь может выбрать несколько вариантов, чтобы получить список врачей, это как мое действие похоже. общественный JsonResult DoctorsList (интермедиат? специализация, внутр? город, внутр? область, внутр? insurance_company, строка doctor_name) Любой из этих аргументов может иметь некоторое значение и любые их количество может быть пустыми, и все может быть пустым в том, что я вернусь все записи. Теперь я знаю, что долгий и сложный путь, где я могу сделать различные комбинации этих аргументов и проверить, какой из утративших которых один не, а затем написать мой запроса на его основе. Но есть ли еще короче и более эффективный способ? Сейчас я использую или условия, чтобы получить записи, как эти переменных врачи = db.Doctors.Where (е => e.specialization == специализации || e.Clinics.FirstOrDefault (CS => cs.doctor_id == e.doctor_id) .Area.city_id == город || e.Clinics.FirstOrDefault (CS => cs.doctor_id == e.doctor_id) == .area_id область || e.Clinics.FirstOrDefault (CS => cs.doctor_id == е. doctor_id) .ClinicInsuranceCompanies .Select (син => sin.company_id) .ToList (). Содержит (insurance_company) || e.first_name == doctor_name || e.last_name == doctor_name) .Select (s => новый {doctor_name = s.first_name + "" + s.last_name}) ToList (). Но я хочу, чтобы работать в комбинации, Для примера Выбор врачей с specialization_id = 1 и CITY_ID = 2, других комбинаций, как это. Но ИЛИ условие будет верным, если соответствует только одно условие
Shair
1

голосов
0

ответ
219

Просмотры

Entity Framework 6 фильтруется индекс

Я занимаюсь разработкой приложения с помощью Entity Framework 6, и я хочу использовать отфильтрованные индексы (индекс с где п). В Entity Framework есть индекс примечание, которое позволяет определить индекс на свойстве (столбец). Я определяю что-то вроде общественного класса SqlDefaultValueAttribute: Атрибут {общественное значение объекта {получить; задавать; } SqlDefaultValueAttribute (значение объекта) публичное {Значение = значение; }} И использовать его как этот общественный класс MyEntity {[SqlDefaultValue (123)] общественного ИНТ DefInt {получить; задавать; }}, То в OnModelCreating функции, я что-то вроде этого modelBuilder.Conventions.Add написать (новый AttributeToColumnAnnotationConvention (nameof (SqlDefaultValueAttribute), (р, атрибуты) => attributes.Single () Value).); и в конфигурационном файле что-то вроде этого общественного класса Конфигурация: DbMigrationsConfiguration {общественного конфигурации () {AutomaticMigrationsEnabled = TRUE; AutomaticMigrationDataLossAllowed = истина; SetSqlGenerator (SqlProviderServices.ProviderInvariantName, новый CustomSqlServerMigrationSqlGenerator ()); } Манипулировать SQL, генерируемый EF Для создания значения по умолчанию при создании столбца или создании таблицы, я переопределить Сформировать (CreateTableOperation createTableOperation) и Генерирование (AddColumnOperation addColumnOperation) В обеих функциях, я могу получить AnnotationValue от ColumnModel как это AnnotationValues ​​значения; если (column.Annotations.TryGetValue (nameof (SqlDefaultValueAttribute), из значения)) {column.DefaultValue = values.NewValue; } Таким образом, при инициализации набора стратегии MigrateDatabaseToLatestVersion, каждый раз, когда модель изменяется, мои изменения базы данных и значение по умолчанию установлены правильно. Теперь я хочу, то же самое для индекса. Как я могу определить пользовательскую аннотацию для индекса с AutoMigration набором? Существует Сформировать (CreateIndexOperation createIndexOperation) для перенастройки, но я не знаю, как установить AnonymousArguments для createIndexOperation (createIndexOperation.Columns список строк, а не ColumnModel). Существует какой-то способ, как ручная миграция и переопределить вверх и вниз функцию и переопределить CreateIndex, но я хочу сделать это делается автоматически без ручного переноса.
hamed
0

голосов
1

ответ
2

Просмотры

System.AccessViolationException или System.ExecutionEngineException аварии в SQLitePCLRaw.provider.e_sqlite3.dll с множественным доступом резьбой

EDIT: (разрешаемые номер 6) Что вызывает System.AccessViolationException или System.ExecutionEngineException сбой в SQLitePCLRaw.provider.e_sqlite3.dll, когда несколько потоков получить доступ к моей FooDbContext одновременно? У меня есть Xamarin Forms приложение (3.5.0.169047) с поддержкой UWP, Android и IOS, используя NETstandard 2.0.3, 2.2.4, Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Sqlite 2.2.4, и у меня есть ситуации, воспроизводимые аварии (это происходит точно на UWP), что я есть проблема, которая возникает разрешающую при одновременном доступе к базе данных SQLite на устройстве из двух разных потоков одновременно. У меня есть процесс синхронизации (выталкивает локальные данные к API и тянет онлайн данные из API), который может занять до минуты или около того, что мне нужно выполнить в отдельном потоке, чтобы сохранить пользовательский интерфейс отзывчивый во время его работы. Мне также нужно разрешить обработку запросов локальных данных во время синхронизации, чтобы позволить навигацию во время синхронизации или других операций только для чтения данных в пределах приложения во время синхронизации. Затянувшаяся синхронизация работает нормально, если я не делать какие-либо операции доступа к данным во время синхронизации, но вылетает сразу после завершения любой отключающей операции доступа к данным короче. Два исключения аварии, которые я видел произойти (возможно, временные, связанные, для которых приводит к аварии на идентичных репродукций) являются, как видно из вывода отладки из Visual Studio 2017 (v15.9.5): необработанное исключение типа «System .AccessViolationException»произошло в SQLitePCLRaw.provider.e_sqlite3.dll Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена. Необработанное исключение типа «System.ExecutionEngineException» произошло в SQLitePCLRaw.provider.e_sqlite3.dll При отладке, не существует каких-либо дополнительных подробностей о исключения; это происходит во время различных долгоиграющих строк коды синхронизации, в зависимости от времени делать прерывающее действие; и продолжительном код, где отладчик показывает исключение происходит это все содержится в Try {...} Поймать (Exception) {...} попробуйте блок в моем коде. Что может быть причиной этого и как я могу решить это? Я прошел через все следующие: Является ли использование SQLite совместим с несколькими потоками? Да; он находится в режиме «сериализованном» по умолчанию в соответствии с https://www.sqlite.org/threadsafe.html и что поддерживает использование многопоточного без ограничений. Основная версия SQLite используется в 3.26.0, который я определил, исследуя мой Microsoft.Data.Sqlite. Информация SQLiteConnection при отладке. Это потому, что я не могу иметь более чем одно соединение открытого с возможностью записи одновременно? Нет; Я даже модифицирована мои строки подключения с помощью Microsoft.Data.Sqlite.SqliteConnectionStringBuilder иметь соответствующий режим (SqliteOpenMode.ReadOnly или SqliteOpenMode.ReadWriteCreate), в зависимости от потребностей каждого доступа к данным. Является ли это потому, что Dispose прерывающего потока FooDbContext (в) избавляется от ресурсов, которые FooDbContext продолжительной нити, на которые ссылаются? Нет; Я исследовал это много, так как это был последний точки останова, я мог ударить до аварии. Даже когда я перегрузил Dispose метода в FooDbContext не делать ничего, даже не называть Dispose базового класса (не рекомендуется, но я попробовал это временно), авария произошла еще. Есть ли настройки можно установить с помощью Microsoft.Data.Sqlite.SqliteConnectionStringBuilder или Microsoft.Data.Sqlite.SQLiteConnection или функцию UseSqlite Microsoft.EntityFrameworkCore.DbContextOptionsBuilder, чтобы гарантировать, что Сериализированная режим используется (я не был 100% уверен, что это было в этом точка)? Нет; Я посмотрел широко, и этот вариант должен быть спрятан в внутренностях SQLite библиотеки выбрала. Я сделал изрядное количество чтения и исследования, которые до сих пор дали мне немного еще я мог бы попробовать. https://www.sqlite.org/sharedcache.html https://www.sqlite.org/lockingv3.html https://www.sqlite.org/atomiccommit.html#sect_9_0 https://www.sqlite.org /uri.html https://docs.microsoft.com/en-us/ef/core/get-started/uwp/getting-started https://docs.microsoft.com/en-us/ef/core/get -started / Netcore / новый-DB-SQLite https: // GitHub. ком / САШ / EntityFrameworkCore / вопросы / 5466 https://docs.microsoft.com/en-us/windows/uwp/data-access/sqlite-databases https://www.connectionstrings.com/sqlite/ https: // csharp.hotexamples.com/examples/-/DbContextOptionsBuilder/UseSqlite/php-dbcontextoptionsbuilder-usesqlite-method-examples.html https://system.data.sqlite.org/index.html/info/dd30ecb89d423c4c https: // WWW. sqlite.org/src/info/e8d439c77685eca6 https://forums.asp.net/t/2143077.aspx?EntityFramework+Core+Do+we+have+to+explicitly+dispose+the+DBContext https: // GitHub. ком / САШИ / EntityFrameworkCore / вопросы / 9901 https://xamarinhelp.com/entity-framework-core-xamarin-forms/ EDIT: Ответ, который решил эту проблему для меня: я заметил, что дллы исключение пришло были SQLitePCLRaw.provider .e_sqlite3.dll. Это привело меня к глядя на то, что на самом деле создает библиотеку SQLite низкого уровня, и это в конечном счете, вызов SQLitePCL.Batteries_V2.Init (); который выбирает для конкретной платформы поставщика SQLite низкого уровня, который будет использоваться. Может ли это быть так? Да; получается, что после прочтения через информацию вики на https://github.com/ericsink/SQLitePCL.raw/wiki/SQLitePCL.Batteries.Init#what-does-batteries_v2init-do, что вызов был SQLitePCL.Batteries_V2.Init предназначено быть сделано только один раз для каждой платформы (либо платформы конкретного кода, или в общем коде, пока установлено Microsoft.EntityFrameworkCore.Sqlite в общем проекте, а также каждую платформу конкретного проекте). Мое использование SQLitePCL.Batteries.Init было неправильно внутри OnConfiguring в FooDbContext, который сделал это называется один раз в настройке из FooDbContext вместо только делается один раз в запуске приложения. Перемещение SQLitePCL.Batteries_V2.Init (); линия из OnConfiguring, и в конструктор App.xaml.cs в моем общем проекте установил ее! не Аварии больше не произошло после того, как доступ к данным прерывающих потока. Я действительно надеюсь, что это спасает кого-то огромные нервотрепки он спас меня, пытаясь добраться до нижней частью этого.
Tommy Elliott
1

голосов
2

ответ
282

Просмотры

LINQPAD - PredicateBuilder throwing error

Когда я запускаю заявление ниже в LINQPad это метание следующее сообщение об ошибке: Тип выражения узла LINQ «Invoke» не поддерживается в LINQ к Entities. Это, кажется, соответствует некоторым из других примеров, которые я видел в Интернете. Что я делаю неправильно? LINQPad версия 5 Язык: C # Заявление Connection: # проект C DLL, содержащий Entity Framework уаг dynamicGlobalFilter = PredicateBuilder.True (); dynamicGlobalFilter = dynamicGlobalFilter.And (х => x.username.Contains ( "W")); Тест переменная = users.Where (dynamicGlobalFilter); test.Dump (); Примечание: Я включил PredicateBuilder в LINQPad нажатия клавиши F4 в моем окне запроса и флажок. UPDATE (FIX!): Нажмите F4 в окне запроса в LINQPad Под Дополнительные ссылки нажмите ADD Нажмите кнопку Обзор Расположить LinqKit.dll на диске (загруженном на сайте LinqKit) .. если вы»
spyder1329
1

голосов
2

ответ
429

Просмотры

рамки Entity подключается к основной базе данных для пользователя базы данных, содержащихся

У меня есть содержащийся пользователь базы данных. Так как он содержится в базе данных это не разрешено подключаться к любой другой базе данных, включая мастера. К сожалению, Entity Framework, кажется, для подключения к основной базе данных в любом случае. Я создал новое консольное приложение с последней Entity Framework NuGet (6.2.0), чтобы убедиться, что ничего другого подключается к основной базе данных: статическая сила Main (string [] арг) {вар ConnectionString = «Server = SQL-лазурь. database.windows.net; Database = 'База данных'; User ID = Имя пользователя, Пароль = пароль, Trusted_Connection = False; "; используя (вар DbContext = новый DbContext (ConnectionString)) {dbContext.Database.CommandTimeout = 10 * 60; dbContext.Database.ExecuteSqlCommand ( "EXEC очистки @date", новый SqlParameter ( "@ Дата", DateTime.UtcNow.AddMonths (-3))); }} Как заставить Entity Framework, чтобы не подключаться к основной базе данных? Я получаю отказы в журналах аудита на основной базе данных, которая вызывает обнаружение лазури угрозы уйти.
Zenuka
1

голосов
2

ответ
324

Просмотры

Включить) против Select () производительность (

У меня есть родительский объект с навигационным имуществом дочернего объекта. Родительский объект не может быть удален, пока есть связанные записи в дочерней сущности. Ребенок объект может содержать сотни тысяч записей. Мне интересно, что будет наиболее эффективным, чтобы сделать в Entity Framework, чтобы сделать это: вар parentRecord = _context.Where (х => x.Id == request.Id) .INCLUDE (х => x.ChildTable) .FirstOrDefault (); // проверить, если parentRecord существует, если (parentRecord.ChildTable.Any ()) {// не может удалить} или вар parentRecord = _context.Where (х => x.Id == request.Id) .Select (х => новый { ParentRecord = х, HasChildRecords = x.ChildTable. Любой ()}) .FirstOrDefault (); // проверить, если parentRecord существует, если (parentRecord.HasChildRecords) {// не может удалить} Первый запрос может включать в себя тысячи записей в то время как второй запрос не будет, однако, второй является более сложным. Какой лучший способ сделать это?
Bv202
1

голосов
0

ответ
39

Просмотры

Войти Исключения с EntityFramework в WebAPI Exception Filter или IExceptionLogger

Я имею в виду использовать ExceptionLogger или ExceptionFilterAttribute в моем Web API приложения 2.x. Мой OR / M является Entity Framework 6 и AutoFac как мой IoC. Рассмотрим атрибут исключения ниже: ApiExceptionFilterAttribute общественного класса: ExceptionFilterAttribute {общественного IDbContext MyContext {получить; задавать; } Общественного переопределения недействительный OnException (HttpActionExecutedContext actionExecutedContext) {base.OnException (actionExecutedContext); // некоторый код MyContext.SaveChanges (); }} Я думаю, если мое приложение выбрасывает любое исключение OnException метод будет вызывать и мне нужен новый экземпляр DbContext, чтобы сохранить журнал ошибок, но моя конфигурация AutoFac для DbContext является InstancePerRequest, так что я думаю, что AutoFac разрешит MyContext как совместно DbContext. Вот моя конфигурация AutoFac для DbContext: builder.RegisterType (). Как () .InstancePerRequest (); Как я мог бы сделать AutoFac к reslove DbContext как новый экземпляр для ApiExceptionFilterAttribute?
Ali Bahraminezhad
1

голосов
1

ответ
35

Просмотры

Entity Framework 6 частичных первичный ключ автоинкрементных

Я пытаюсь сделать генерацию ключей автоинкрементируемой только часть ключа для данного класса: класс MyEntity {[Key] общественный ИНТ OtherEntityId {получить; задавать; } [Key] [DatabaseGenerated (DatabaseGeneratedOption.Identity)] общественного ИНТ MyEntityId {получить; задавать; } [ForeignKey ( "OtherEntityId")] общественность виртуальной OtherEntity OtherEntity {получить; задавать; }} Так что мой вопрос с этим автогенерируемая ключи не начните с 1 для каждого OtherEntityId. Что я имею в виду, это как моя таблица выглядит после вставки некоторых значений: | OtherEntityId | MyEntityId | | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 4 | И я бы ожидать, что последняя строка будет (2,1) вместо (2,4) Есть ли способ, чтобы сделать эту работу с EF?
Artemoire
1

голосов
0

ответ
554

Просмотры

Automapper первый выступ IQueryable.ProjectTo слишком медленно

У меня есть классы DTO: общественный класс PackageDto {общественный MemberDto приемник {получить; задавать; } Общественного MemberDto Отправитель {получить; задавать; } Общественного DocflowDto Документооборот {получить; задавать; } Общественного DocflowTypeOption DocflowTypeId {получить; задавать; } Публичная строка кода {получить; задавать; } Общественного Guid? DocGuid {получить; задавать; }} Общественного класса LightPackageDto {общественного DocflowDto Документооборот {получить; задавать; } Общественного DocflowTypeOption DocflowTypeId {получить; задавать; } Публичная строка кода {получить; задавать; } Общественного Guid? DocGuid {получить; задавать; }} Общественного класса MemberDto {публичная строка prop1 {получить; задавать; } Общественного EntityTypeOption prop2 {получить; задавать; } Публичная строка Prop3 {получить; задавать; } Публичная строка Prop4 {получить; задавать; } Публичная строка Prop5 {получить; задавать; } Общественного PersonDto директор {получить; задавать; } Публичная строка CompanyShortName {получить; задавать; } Публичная строка CompanyFullName {получить; задавать; } Публичная строка CompanyPrefix {получить; задавать; }} DocflowDto имеет 3 простых свойств типа и, по прогнозам, сглаживая. PersonDto имеет 3 простых свойств типа и проецируется уплощение слишком Mapping правила: CreateMap (); CreateMap () .ForMember (приемник => dest.Prop1, опт => opt.MapFrom (SRC => src.Employee.Prop1)) .ForMember (приемник => dest.Prop2, опт => opt.MapFrom (SRC => src.Prop2)) .ForMember (приемник => dest.Prop3, опт => opt.MapFrom (SRC => src.Employee.Prop3)) .ForMember (приемник => dest.Prop4, опт => opt.MapFrom (SRC => src.Employee.Prop4)) .ForMember (приемник => dest.Prop5, опт => opt.MapFrom (SRC => src.Employee.Prop5)) .ForMember (приемник => dest.Director, опт => неавтоматического , MapFrom (SRC => src.Employee.Director)) .ForMember (приемник => dest.CompanyShortName, опт => opt.MapFrom (SRC => src.Company.CompanyShortName)) .ForMember (приемник => dest.CompanyFullName, опт => opt.MapFrom (SRC => src.Company.CompanyFullName)) .ForMember (приемник => dest.CompanyPrefix, опт => opt.MapFrom (SRC => src.Company.Prefix)); CreateMap () .ForMember (приемник => dest.Sender, опт => opt.MapFrom (SRC => src.Sender)) .ForMember (приемник => dest.Receiver, опт => opt.MapFrom (SRC => SRC. приемник)) .ForMember (приемник => dest.Docflow, опт => opt.MapFrom (SRC => src.Docflow)) .ForMember (приемник => dest.DocGuid, опт => opt.MapFrom (SRC => SRC. Files.FirstOrDefault () DocGuid)). CreateMap () .ForMember (приемник => dest.Docflow, опт => opt.MapFrom (SRC => src.Docflow)) .ForMember (приемник => dest.DocGuid, опт => opt.MapFrom (SRC => SRC. Files.FirstOrDefault () DocGuid)). Тогда тесты: // быстро вар lightEntity = ждут _db.Packages.Where (р => p.PackageGuid == packageGuid) .ProjectTo () FirstOrDefaultAsync ();. // быстро (_db.GetPackage сделать запрос всем необходимым включает в себя) вар объект = ждут _db.GetPackage (packageGuid); вар entityDto = AutoMapper.Mapper.Map (юридическое лицо); // первый запуск слишком медленный результат вар = ждут _db.Packages.AsNoTracking () Где (р => p.PackageGuid == packageGuid) .ProjectTo () FirstOrDefaultAsync ()..; 1) Так что, если я проецируюсь LightPackageDto (без проекций членов) все в порядке. 2) Если я возвращаю объект вручную из EF с включает в себя, а затем я делаю отображения для «в памяти» лица все в порядке тоже 3) Если я хочу Automapper делает «Выбрать» применяя запрос ProjectTo я всегда сразу получить заморозить около 2-3 сек. Но замораживание появляется только один первый раз. Зачем? И еще один вопрос. Я вижу, в результате SQL оператора выбора всех столбцов всех касающихся таблиц. Я должен видеть только столбцы, необходимые для проецирования назначения. Почему все там? Я должен видеть только столбцы, необходимые для проецирования назначения. Почему все там? Я должен видеть только столбцы, необходимые для проецирования назначения. Почему все там?
vitm
1

голосов
0

ответ
47

Просмотры

Способ сохранения рамочного объекта запроса для последующего использования - создания отчетов

В нашей компании мы создаем собственные отчеты для клиентов, которые пользуются нашими услугами. Данные, которую мы собираем контактные данные (имя, фамилию, компанию, электронная почта и т.д.) из присутствующих на мероприятиях, но есть и динамические данные, захваченные. Каждое событие, где мы собираем свои данные, есть исследования, которые обычай события и компании. Например, в случае 123 там может быть исследование с 2 вопроса. Q1 может быть открытым / свободный текст и Q2 будет множественный выбор (выбрать п из списка опций, которые мы определяем). Чтобы закодировать такой отчет, что, в настоящее время ручной процесс, как нам нужно 1. Фильтр на всех контактных данных для этого события и конкретного клиента 2. Создайте временную таблицу со стандартными колонками (имя, фамилия, и т.д.) 3 . Но и с настраиваемыми колонками, однако многие вопросы обследования мы имеем (2) 4. Заполняем временную таблицу с данными из шага 1 5. Используйте Обновление на основе набора, чтобы получить ответы на опрос для каждого вопроса 6. Формат отчета в требуемом формате (порядок столбцов) Это в настоящее время осуществляется в хранимой процедуре, которая время потребляя, подверженные ошибкам и утомительны. Есть ли способ, чтобы как-то сохранить запрос EF (например, от событий в db.Events присоединиться ....) где-то, и в состоянии получить, что и выполнить? Аналогично предыдущему, за исключением порядок вывода столбцов и есть, что отражено при запуске отчета В настоящее время мы делаем это в sprocs, но в идеале мы хотим, чтобы это сделать с помощью EF в качестве инструмента для генерации отчетов. Edit: Вот урезанная версия SQL, необходимая для отчета. - Шаг 1. Фильтр свинцовые данных в временную таблицу. Скажем, есть 10 приводит, и 8 имеют ответы на опрос для 2 вопроса. ВЫБРАТЬ leadID, FirstName, LastName, электронная почта в #leads ИЗ dbo.leads ГДЕ EventID = 123 и CompanyID = 456 - Шаг 2 и 3. Создать временную таблицу со стандартными контактными полями плюс вопросами обследования. CREATE TABLE #data (LeadId NVARCHAR (50) первичный ключ, FirstName NVARCHAR (100), ЬазШате NVARCHAR (100), EmailAddress NVARCHAR (100), [Вопрос1] NVARCHAR (1000), [Вопрос2] NVARCHAR (1000)) - Шаг 4. Заселите временную таблицу. INSERT INTO Данные нужно (LeadId, FirstName, LastName, EmailAddress) ВЫБРАТЬ leadid, FirstName, LastName, электронная почта ОТ #leads L - Шаг 5. Используйте обновление на основе набора, чтобы получить ответы на опрос для каждого вопроса. 8 приводит в каждой инструкции обновления будет обновляться по мере 2 приводит не ответили на опрос. ОБНОВЛЕНИЕ TTARGET SET Вопрос1 = OA.Title ОТ #data TTARGET РЕГИСТРИРУЙТЕСЬ answerset ответы на TTARGET.LeadId = answers.leadid РЕГИСТРИРУЙТЕСЬ дие. Ответ А на answers.answersetid = A.answersetid РЕГИСТРИРУЙТЕСЬ que.optionalanswer О.А. О A.possibleAnswerId = OA.optionalAnswerId WHERE A.questionid IN ( '3A2FFD77-BF37-4580-938A-FF234395B602') И A.Active = 1 UPDATE SET TTARGET Вопрос2 = OA.Title оТ #data TTARGET РЕГИСТРИРУЙТЕСЬ answerset ответы на TTARGET.LeadId = answers.leadid РЕГИСТРИРУЙТЕСЬ que.answer А на answers.answersetid = A.answersetid РЕГИСТРИРУЙТЕСЬ que.optionalanswer О.А. о A.possibleAnswerId = OA.optionalAnswerId ГДЕ A.questionid IN ( '75C5FA00-439F-4DA9-9662-9C683A0E6719') и A.Active = 1 - Шаг 6. Формат отчета. ВЫБОР ПгвЬЫате, LastName EmailAddress, LeadId, Вопрос1 как «название первого вопроса», Вопрос2 как «название второго вопроса» FROM #data optionalAnswerId ГДЕ A.questionid В ( '3A2FFD77-BF37-4580-938A-FF234395B602') И A.Active = 1 ОБНОВЛЕНИЕ TTARGET SET Вопрос2 = OA.Title ОТ #data TTARGET РЕГИСТРИРУЙТЕСЬ answerset ответы на TTARGET.LeadId = answers.leadid РЕГИСТРИРУЙТЕСЬ Que Отвечать на А на answers.answersetid = A.answersetid РЕГИСТРИРУЙТЕСЬ que.optionalanswer О.А. о A.possibleAnswerId = OA.optionalAnswerId ГДЕ A.questionid в ( '75C5FA00-439F-4DA9-9662-9C683A0E6719') И A.Active = 1 - Шаг 6. Формат отчета. ВЫБОР ПгвЬЫате, LastName EmailAddress, LeadId, Вопрос1 как «название первого вопроса», Вопрос2 как «название второго вопроса» FROM #data optionalAnswerId ГДЕ A.questionid В ( '3A2FFD77-BF37-4580-938A-FF234395B602') И A.Active = 1 ОБНОВЛЕНИЕ TTARGET SET Вопрос2 = OA.Title ОТ #data TTARGET РЕГИСТРИРУЙТЕСЬ answerset ответы на TTARGET.LeadId = answers.leadid РЕГИСТРИРУЙТЕСЬ Que Отвечать на А на answers.answersetid = A.answersetid РЕГИСТРИРУЙТЕСЬ que.optionalanswer О.А. о A.possibleAnswerId = OA.optionalAnswerId ГДЕ A.questionid в ( '75C5FA00-439F-4DA9-9662-9C683A0E6719') И A.Active = 1 - Шаг 6. Формат отчета. ВЫБОР ПгвЬЫате, LastName EmailAddress, LeadId, Вопрос1 как «название первого вопроса», Вопрос2 как «название второго вопроса» FROM #data Название ОТ #data TTARGET РЕГИСТРИРУЙТЕСЬ answerset ответы на TTARGET.LeadId = answers.leadid РЕГИСТРИРУЙТЕСЬ que.answer А на answers.answersetid = A.answersetid РЕГИСТРИРУЙТЕСЬ que.optionalanswer OA О A.possibleAnswerId = OA.optionalAnswerId WHERE A.questionid IN ( '75C5FA00 -439F-4DA9-9662-9C683A0E6719' ) И A.Active = 1 - Шаг 6. Формат отчета. ВЫБОР ПгвЬЫате, LastName EmailAddress, LeadId, Вопрос1 как «название первого вопроса», Вопрос2 как «название второго вопроса» FROM #data Название ОТ #data TTARGET РЕГИСТРИРУЙТЕСЬ answerset ответы на TTARGET.LeadId = answers.leadid РЕГИСТРИРУЙТЕСЬ que.answer А на answers.answersetid = A.answersetid РЕГИСТРИРУЙТЕСЬ que.optionalanswer OA О A.possibleAnswerId = OA.optionalAnswerId WHERE A.questionid IN ( '75C5FA00 -439F-4DA9-9662-9C683A0E6719' ) И A.Active = 1 - Шаг 6. Формат отчета. ВЫБОР ПгвЬЫате, LastName EmailAddress, LeadId, Вопрос1 как «название первого вопроса», Вопрос2 как «название второго вопроса» FROM #data
andrewb
1

голосов
1

ответ
34

Просмотры

Error Deleting a child object from its parent

I'm using vb.net 2013, Entity Framework 6 and SQL Server 2008 R2. I'm trying to delete from child entities, and this does not work. But if I try to delete directly from context, this works. In my database I have 2 tables Students and Result. This is my code that does not work : Dim context as Myentities = New myentities. Dim s as student. Dim lresult as new list (of result) s = context.students.where(Function(t1) t1.value>5).Tolist.first lresult = (from t in s.results where t.vl2=7 select t).Tolist for each rs as result in lresult if rs.vl3=11 then s.results.remove(rs) Next Context.SaveChanges This code produces an error on the last line (context.SaveChanges) : An unhandled exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll Additional information: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted. But if I change the line that delete the item, like below, it works : Dim context as Myentities = New myentities. Dim s as student. Dim lresult as new list (of result) s = context.students.where(Function(t1) t1.value>5).Tolist.first lresult = (from t in s.results where t.vl2=7 select t).Tolist for each rs as result in lresult if rs.vl3=11 then context.results.remove(rs) Next Context.SaveChanges Why does my first snippet of code not work?
Adriano
1

голосов
0

ответ
371

Просмотры

Entity Framework 6 - Предельное выражение услуг были достигнут

У меня есть вопрос о EF. У меня есть один DbSet так: ToolsDbContext общественного класса: DbContext {общественных DbSet ToolsObjects {получить; задавать; }} А также есть много унаследованных clasees от ToolsObject. Когда я унаследовал еще два класса от ToolsObject я получил это исключение: System.Data.SqlClient.SqlException: Внутренняя ошибка: предел выражения услуг было достигнуто. Пожалуйста, посмотрите на потенциально сложные выражения в запросе, и попытаться их упростить. во время этой строки кода: Еогеасп (вар myObj в _Database.ToolsObjects) {} Но это работает, когда я получаю объекты на этот путь (наследуемого класса): Еогеасп (вар myObj в _Database.ToolsObjects.OfType ()) {} Так что я думаю, я достиг максимума (65535) идентификаторов и констант, которые могут содержаться в одном выражении запроса, из-за многочисленных и сложных наследуемых классов от базового класса ToolsObject. Есть ли какое-то решение для этого?
MichalDawn
1

голосов
0

ответ
20

Просмотры

лямбда-выражение Entity Framework динамический запрос

Я новичок в лямбда, мне нужно создать динамический запрос, и я не даже если это возможно, знаю. Родитель Таблица> Родительские Детские столы: 1. Child_1> FK ParentId 2. Child_2> FK ParentId 3. Child_3> FK ParentId Я передаю некоторые Params (фильтры) со страницы, некоторые фильтры применяются на родительском уровне и других детей. Конечной целью является отображение детей, независимо от таблицы (1,2 или 3). IE - Filter = Type_A - Одна запись в Child_1 и Child_2 - Выдаются записи я мог бы сделать это, используя, если-то еще, если-то еще, если только это не будет хорошо программирования, так как я в основном дублировать код, и это очень много. Я предположил, что я могу использовать UNION, но я буду очень признателен, если кто-то может направить меня на лучший подход.
Carlos
1

голосов
0

ответ
44

Просмотры

Entity Framework - вставить данные с «равными» (но не ReferenceEqual) Эталонные свойствами

Я использую EFCore. У меня есть несколько объектов (лицо), которые содержат определенные навигационные свойства (Skill). Человек-объекты Я имеющие были созданы таким образом, что некоторые могут иметь навыки, которые имеют одни и те же ключи, однако они имеют разные объекты, т.е. имеют разные ссылки. Предположим, я не имею никакого влияния на пути их создания. Когда я пытаюсь вставить их с помощью EFCore, я столкнулся исключение, потому что EFCore не может отслеживать несколько Skill объектов с одинаковыми ключами: Класс Skill: IEquatable {строка Name {получить, установить;} BOOL Equals (Skill другой) {. ..} переопределение BOOL Равно (объект другой) {...} переопределение INT GetHashCode () {...}} класс Person {строка Name {получить, установить;} умение умение {получить, установить;}} вар skill1 = новый умение {Name = "тест умение"}; вар person1 = новый Person {Name = "Person2", Skill = skill1}; вар skill2 = новый навык {Name = "тест умение"}; вар PERSON2 = новый Person {Name = "Person2", Skill = skill2}; вар люди = новый [] {person1, PERSON2}; // skill1.Equals (skill2), но это все равно будет сгенерировано исключение, потому что EF не может отслеживать два умение объекты с тем же ключом Context.People.AddRange (человек); В «принципе», не должна быть никакой проблемы вставки этого в БД - Навык объекты имеют один и тот же ключ, но также равны, так что бы просто нужно быть 1 ВСТАВИТЬ в базу данных. Конечно, это не идет хорошо, как EF обрабатывает вещи, и как осуществляется отслеживание изменений. Единственный способ, которым я могу думать, после того, как Человек-объекты создаются (имейте в виду, предположение, я не могу контролировать это), чтобы вручную перебрать все объекты Person, я хочу вставить, и «объединить» все свойства навигации. Или, другими словами, заменить все объекты Skill, которые равны (Skill.Equals) с одной и той же ссылке - или какой-либо взяты из объектов, которые будут добавлены, или один извлечена из базы данных, в случае, если он уже содержит запись с Нужный key.y Хотя это будет работать в таком простом случае, это становится очень сложным в моем реальном прецеденте, который имеет гораздо больше эталонных свойства, которые имеют свои собственные свойства refereence и так далее. Есть ли более стандартный / более эффективный способ обработки этой проблемы? Спасибо это становится очень сложными в моем реальном прецеденте, который имеет гораздо больше эталонных свойства, которые имеют свои собственные свойства refereence и так далее. Есть ли более стандартный / более эффективный способ обработки этой проблемы? Спасибо это становится очень сложными в моем реальном прецеденте, который имеет гораздо больше эталонных свойства, которые имеют свои собственные свойства refereence и так далее. Есть ли более стандартный / более эффективный способ обработки этой проблемы? Спасибо
Bogey
1

голосов
0

ответ
122

Просмотры

Entity Framework Group Join on a Many To Many Relationship

I have a Campaign Table and a Group table with a many to many relationship. I also have a CampaignGroup table which serves the xref table between the two. I want to do a group join from Campaign to Group so that I end up with an object that looks like: public Campaign Campaign {get;set;} public List Groups {get;set;} Due to reasons beyond my control, I cannot use Entity Framework's Include feature. If I can do a Group Join from Campaign to CampaignGroup like this: _dbContext.Campaigns.GroupJoin(_dbContext.CampginGroup, c => c.CampaignId, cg => cg.CampaignId, (c, cg) => new { Campaign = c, CampaignGroups = cg } But that gives me an object that looks like: public Campaign Campaign {get;set;} public List CampaignGroups {get;set;} How do I take this GroupJoin to the next level and get just the group? I tried this, but when it executes Entity Framework warns me that it can't be evaluated and will be performed locally which kills the performance: var campaignGroupQuery = _dbContext.CampaignGroup.Join( _dbContext.Group, cg=> cg.GroupId, g=> g.GroupId, (cg, g) => new { CampaignId = cg.CampaignId, Group= g }); return _dbContext.Campaigns.GroupJoin(campaignGroupQuery, campaign => campaign.JlmReferenceId, cg=> cg.JlmReferenceId, (campaign, cg) => new { Campaign = campaign, Groups = cg.Select(cg => cg.Group) }); Any help would be appreciated. Thanks!
jkruer01
1

голосов
1

ответ
280

Просмотры

Kendo mvc grid with multiselect column. Row is null reference

I have two models with relationship "Many to Many", Books, Authors, and their context Library. All source files included correctly. Cannot set selected Authors to the cell(because row is null, so model cannot be set). There is using InCell editor. I will be glad to any ideas) UPD: new error occurred when I add a new line Unable to get property 'map' of undefined or null reference Index.cs.html:(error in change function, second error in dataBound function) @{ ViewBag.Title = "Home Page"; } @(Html.Kendo().Grid() .Name("grid") .Columns(columns => { columns.Bound(e => e.BookId).Visible(false); columns.Bound(e => e.Pages); columns.Bound(e => e.Genre); columns.Bound(e => e.Publisher); columns.Bound(e => e.Authors).ClientTemplate( Html.Kendo().MultiSelect().Name("multi#=BookId#") .DataTextField("AuthorName") .DataValueField("AuthorId") .BindTo((IEnumerable)ViewData["authors"]) /*TaskSecond.Models.ViewModel*/ .Events(e => e.Change("change")) .ToClientTemplate().ToHtmlString() ); columns.Command(command => command.Destroy()).Width(150); }) .ToolBar(toolbar => { toolbar.Create(); toolbar.Save(); }) .Editable(editable => editable.Mode(GridEditMode.InCell)) .Pageable() .Filterable() .Events(e => e.DataBound("dataBound")) .DataSource(dataSource => dataSource .Ajax() .Batch(true) .Model(model => { model.Id(p => p.BookId); model.Field(p => p.Pages).DefaultValue(0); model.Field(p => p.Genre).DefaultValue(0); model.Field(p => p.Publisher).DefaultValue(""); model.Field(p => p.Authors).DefaultValue( ViewData["defaultAuthors"] as ManyToMany.Models.Author); }) .PageSize(5) .Read(read => read.Action("Books_Read", "Grid")) .Create(create => create.Action("Books_Create", "Grid")) .Update(update => update.Action("Books_Update", "Grid")) .Destroy(destroy => destroy.Action("Books_Destroy", "Grid")) .ServerOperation(false)) ) function dataBound(e) { var grid = this; grid.tbody.children().each(function () { var dataitem = grid.dataItem(this), row = $(this); eval(row.find("script").html()); var multiSelect = $(this).find("select").data("kendoMultiSelect"); //here multiSelect.value(dataitem.Authors.map(function (i) { return i.AuthorId })); }); } function change(e) { //error is here var row = this.element.closest("tr"), model = $("#grid").data("kendoGrid").dataItem(row); model.set("Authors", this.dataItems()); } ViewModel.cs: public class ViewModel { public ViewModel() { Authors = new List(); } public int BookId { get; set; } public string BookName { get; set; } public int Pages { get; set; } public Genre Genre { get; set; } public string Publisher { get; set; } [UIHint("AuthorsEditor")] public List Authors { get; set; } }
Vlad
1

голосов
0

ответ
371

Просмотры

Asp.Net Web Api маркер аутентификации в Угловая 5

есть ли документация, как реализовать Asp.Net Web Api (oauth2) проверки подлинности маркеров в угловых 5? я могу использовать его с почтальоном и потреблять лексему ключ носителя ... но я не знаю, как использовать его с угловым 5, и нет никакой документации или примеров учиться.
achrafbenalaya
1

голосов
1

ответ
69

Просмотры

Entity Framework 6 - SQL Server и Oracle (SaveChanges)

У меня есть приложение, которое использует ниже (Employee) модель предметной области для SQL Server и поставщика данных Oracle. Эта модель хорошо работает для поставщика данных Oracle, однако же дает ошибку для SQL Server. И когда я изменить поле «ID» из десятичной Int он отлично работает для SQL Server, но дает ошибку в Oracle. В конфигурации приложения я меняю провайдера данных из т.е. с SQL Server на Oracle или наоборот. Невозможно вставить явное значение для столбца идентификаторов в таблице 'Сотрудник', когда IDENTITY_INSERT установлен в положение OFF * ORA-01400:. не может вставить NULL в общественный класс Employee {[Key, Column (( "Emp" "Сотрудник", "ID"..) Order = 0)] публичное десятичного ID {получить; задавать; } Публичная строка NAME {получить; задавать; }} Если (ID == NULL || ID == 0) {Model.Employee OBJ = новый Model.Employee (); obj.NAME = Имя; если (Convert.ToInt32 (ConfigurationSettings.AppSettings [ "DataProviderType"]) == "Oracle") obj.ID = GetNextId (); DbContext.Employees.Add (OBJ); DbContext.SaveChanges (); } Сервера скрипт таблицы SQL CREATE TABLE [DBO]. [Employee] ([ID] [Int] IDENTITY (1,1) NOT NULL, [NAME] [VARCHAR] (256) NULL, CONSTRAINT [Employee_PK] PRIMARY KEY CLUSTERED ([ ID] ASC) С (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] Oracle таблица сценария CREATE TABLE Employee ( "ID" NUMBER NOT NULL ВКЛЮЧИТЬ, "NAME" VARCHAR2 (256)); CREATE UNIQUE INDEX "PK_Employee" ON "Сотрудник" ( "ID"); ALTER TABLE "Сотрудник" ADD CONSTRAINT "
Arayn
1

голосов
1

ответ
53

Просмотры

EF - Загружайте свойства детского имущества с одной .INCLUDE () возможно?

Я использую EF подключен к SQL Server (C #). Я могу получить нужный мне список результатов с помощью следующего кода: используя (вар контекст = новый DbContext ()) {список вара = context.Jobs .INCLUDE (а => a.JobDetails) .INCLUDE (а => а. Shifts.Select (б => b.ShiftDetails.Select (с => c.FirstProperty))) // !! .INCLUDE (а => a.Shifts.Select (б => b.ShiftDetails.Select (с => c.SecondProperty))) // !! .INCLUDE (а => a.Shifts.Select (б => b.ShiftDetails.Select (с => c.ThirdProperty))) // !! .INCLUDE (а => a.Shifts.Select (б => b.ShiftDetails.Select (с => c.FourthProperty))) // !! .ToListAsync (); } Здесь, единственный включают в собственности вплоть до третьего уровня, кажется сомнительным. Есть ли способ, чтобы упростить его, что-то вдоль линий: .INCLUDE (а => a.Shifts.Select (Ь => Ь.
AwonDanag
1

голосов
1

ответ
109

Просмотры

Как избежать Entity Базовых рамок OrderBy свойства списка от делать Top (1) для каждого списка элемента в базе данных?

Я сделать запрос к базе данных с помощью EF Ядро 2.0.1 и, в частности, в NuGet пакет Microsoft.EntityFrameworkCore.SqlServer 2.0.1. Вот мои модели: открытый класс Foo {общественности Foo () {Id = Guid.NewGuid (); } Общественного Guid Id {получить; защищенный набор; } Общественного IEnumerable Bars {получить; задавать; }} Класс Бар общественных {общественный бар (строковое значение, Guid anotherId) {Id = Guid.NewGuid (); Значение = значение; AnotherId = anotherId; } Защищенный Bar () {} общественного Guid Id {получить; защищенный набор; } Общественного Guid AnotherId {получить; защищенный набор; } Публичная строка Значение {получить; защищенный набор; }} Создать 10 Foo экземпляров, которые имеют список штриховых экземпляров 2 каждый и сохранить, что в базу данных. Когда я пытаюсь и порядок свойством Bar.Value где AnotherId равно anotherId2, это делает в общей сложности 30 вызовов в базе данных. Вот мои настройки и запрос на заказ по свойству значения на экземпляре бара, где он имеет anotherId2: Guid anotherId1 = Guid.NewGuid (); Guid anotherId2 = Guid.NewGuid (); используя (DbContext DbContext = GetDbContext ()) {dbContext.Add (новый Foo {Bars = новый [] {нового бара ( "А", anotherId1), новый бар ( "Z", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {новый бар ( "б", anotherId1), новый бар ( "у", anotherId2)}}); dbContext.Add (новые Foo {Барс = новый [] {новый бар ( "с", anotherId1), новый бар ( "х", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "d", anotherId1), новый бар ( "V", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "е", anotherId1), новый бар ( "ш", anotherId2)}}); DbContext. Добавить (новый Foo {Bars = новый [] {новый бар ( "F", anotherId1), новый бар ( "U", anotherId2)}}); dbContext.Add (новый Foo {Барса = новый [] {нового бар ( "г", anotherId1), новый бар ( "Т", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "ч", anotherId1), новый бар ( "s", anotherId2)}}); dbContext.Add (новые Foo {Барс = новый [] {новый бар ( "я", anotherId1), новый бар ( "г", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "J", anotherId1), новый бар ( "д", anotherId2)}}); dbContext.SaveChanges (); } Используя (DbContext DbContext = GetDbContext ()) {// К этому моменту, только 7 вызовов внесены в список базы данных FOOS = ждут dbContext.Set (). Include (х => x.Bars) .OrderBy (х => x.Bars.First (у => y.AnotherId == anotherId2) .Value). ToListAsync (); Assert.That (foos.First () Bars.Any (х => x.Value == "Q"), Is.True.); } Когда я использую SQL Profiler это показывает 30 SQL запросов к базе данных! Есть 20 вызовов, которые выглядят как ниже запрос, по одному для каждого перечисления anotherId2 и экземпляра бара:. Exec sp_executesql N'SELECT TOP (1) [y0] [Value] FROM [бар] AS [y0] WHERE ([y0 ]. [AnotherId] = @__ anotherId2_0) И (@_outer_Id = [у0]. [FooId])», N '@__ anotherId2_0 UniqueIdentifier, @ _ ​​outer_Id UniqueIdentifier', @ __ anotherId2_0 = '0AC1FBCA-6DEF-4F50-B4AA-CEC7286135B8', @ _outer_Id = «A6A1785A-B313-4EE7-A0B6-307F54D6F74A» Как я могу остановить это делает эти 20 звонков в базу данных, но все еще заказать Foo путем значения в случае anotherId2? } Когда я использую SQL Profiler это показывает 30 SQL запросов к базе данных! Есть 20 вызовов, которые выглядят как ниже запрос, по одному для каждого перечисления anotherId2 и экземпляра бара:. Exec sp_executesql N'SELECT TOP (1) [y0] [Value] FROM [бар] AS [y0] WHERE ([y0 ]. [AnotherId] = @__ anotherId2_0) И (@_outer_Id = [у0]. [FooId])», N '@__ anotherId2_0 UniqueIdentifier, @ _ ​​outer_Id UniqueIdentifier', @ __ anotherId2_0 = '0AC1FBCA-6DEF-4F50-B4AA-CEC7286135B8', @ _outer_Id = «A6A1785A-B313-4EE7-A0B6-307F54D6F74A» Как я могу остановить это делает эти 20 звонков в базу данных, но все еще заказать Foo путем значения в случае anotherId2? } Когда я использую SQL Profiler это показывает 30 SQL запросов к базе данных! Есть 20 вызовов, которые выглядят как ниже запрос, по одному для каждого перечисления anotherId2 и экземпляра бара:. Exec sp_executesql N'SELECT TOP (1) [y0] [Value] FROM [бар] AS [y0] WHERE ([y0 ]. [AnotherId] = @__ anotherId2_0) И (@_outer_Id = [у0]. [FooId])», N '@__ anotherId2_0 UniqueIdentifier, @ _ ​​outer_Id UniqueIdentifier', @ __ anotherId2_0 = '0AC1FBCA-6DEF-4F50-B4AA-CEC7286135B8', @ _outer_Id = «A6A1785A-B313-4EE7-A0B6-307F54D6F74A» Как я могу остановить это делает эти 20 звонков в базу данных, но все еще заказать Foo путем значения в случае anotherId2?
chris31389
1

голосов
0

ответ
45

Просмотры

Как добавить ссылку на пользователя в моей организации в EF

У меня есть следующие классы (упрощенный): класс компания общественного {общественный Guid Id {получить; набор;} Публичных списка фермы {получить; набор;} Публичного списка сотрудники {получить; набор;}} общественного класса Farm {общественного Guid Id {получить ; набор;} общественного владелец компании {получить, установить;}} класса User общественности {общественного Guid Id {получить; набор;} публичная строка Name {получить; набор;} общественного Guid CompanyID {получить; набор;} публичная Компания {получить ; набор;}} Это все работает отлично. Теперь я хочу, чтобы добавить пользователь, который создал ферму следующим образом: общественный класс Farm {общественного Guid Id {получить; набор;} общественная компания Владелец {получить; набор;} пользы CreatedBy {получить, установить;} // f.CreatedBy ) .WithRequiredDependent () WillCascadeOnDelete (ложь). После этого я получаю сообщение об ошибке Ниже: Сущности в «DbContext.Users» участвуют в отношениях «Farm_CreatedBy». 0 связанные с ' было найдено Farm_CreatedBy_Source. 1 'Farm_CreatedBy_Source' ожидается. Я также заметил, что не только Farms-таблица имеет user_id-поле, но пользователи стола теперь также имеет Farm_Id-поле. Но это не то, что я ожидал / хочу. Это выглядит как отношение 1-к-1 для меня, где каждый ферма имеет пользователь. Что я должен сделать, чтобы настроить это так: My Farm имеет ссылку на пользователь, который не будет удален на Каскаде Моего Пользователь не содержит список всех ферм, он создал (потому что я, вероятно, хочу что-то для других субъектов и Я не хочу иметь списки для всех тех лиц, в моей модели, если это не так, как это сделать конечно: D) *********** *********** РЕДАКТИРОВАТЬ ** я полностью пропустил список на ферме, которая была на самом деле, вызывая «странный» Foreign Key Farm_Id на пользователе. Farm_CreatedBy_Source», как ожидается. Я также заметил, что не только Farms-таблица имеет user_id-поле, но пользователи стола теперь также имеет Farm_Id-поле. Но это не то, что я ожидал / хочу. Это выглядит как отношение 1-к-1 для меня, где каждый ферма имеет пользователь. Что я должен сделать, чтобы настроить это так: My Farm имеет ссылку на пользователь, который не будет удален на Каскаде Моего Пользователь не содержит список всех ферм, он создал (потому что я, вероятно, хочу что-то для других субъектов и Я не хочу иметь списки для всех тех лиц, в моей модели, если это не так, как это сделать конечно: D) *********** *********** РЕДАКТИРОВАТЬ ** я полностью пропустил список на ферме, которая была на самом деле, вызывая «странный» Foreign Key Farm_Id на пользователе. Farm_CreatedBy_Source», как ожидается. Я также заметил, что не только Farms-таблица имеет user_id-поле, но пользователи стола теперь также имеет Farm_Id-поле. Но это не то, что я ожидал / хочу. Это выглядит как отношение 1-к-1 для меня, где каждый ферма имеет пользователь. Что я должен сделать, чтобы настроить это так: My Farm имеет ссылку на пользователь, который не будет удален на Каскаде Моего Пользователь не содержит список всех ферм, он создал (потому что я, вероятно, хочу что-то для других субъектов и Я не хочу иметь списки для всех тех лиц, в моей модели, если это не так, как это сделать конечно: D) *********** *********** РЕДАКТИРОВАТЬ ** я полностью пропустил список на ферме, которая была на самом деле, вызывая «странный» Foreign Key Farm_Id на пользователе. Я также заметил, что не только Farms-таблица имеет user_id-поле, но пользователи стола теперь также имеет Farm_Id-поле. Но это не то, что я ожидал / хочу. Это выглядит как отношение 1-к-1 для меня, где каждый ферма имеет пользователь. Что я должен сделать, чтобы настроить это так: My Farm имеет ссылку на пользователь, который не будет удален на Каскаде Моего Пользователь не содержит список всех ферм, он создал (потому что я, вероятно, хочу что-то для других субъектов и Я не хочу иметь списки для всех тех лиц, в моей модели, если это не так, как это сделать конечно: D) *********** *********** РЕДАКТИРОВАТЬ ** я полностью пропустил список на ферме, которая была на самом деле, вызывая «странный» Foreign Key Farm_Id на пользователе. Я также заметил, что не только Farms-таблица имеет user_id-поле, но пользователи стола теперь также имеет Farm_Id-поле. Но это не то, что я ожидал / хочу. Это выглядит как отношение 1-к-1 для меня, где каждый ферма имеет пользователь. Что я должен сделать, чтобы настроить это так: My Farm имеет ссылку на пользователь, который не будет удален на Каскаде Моего Пользователь не содержит список всех ферм, он создал (потому что я, вероятно, хочу что-то для других субъектов и Я не хочу иметь списки для всех тех лиц, в моей модели, если это не так, как это сделать конечно: D) *********** *********** РЕДАКТИРОВАТЬ ** я полностью пропустил список на ферме, которая была на самом деле, вызывая «странный» Foreign Key Farm_Id на пользователе. Это выглядит как отношение 1-к-1 для меня, где каждый ферма имеет пользователь. Что я должен сделать, чтобы настроить это так: My Farm имеет ссылку на пользователь, который не будет удален на Каскаде Моего Пользователь не содержит список всех ферм, он создал (потому что я, вероятно, хочу что-то для других субъектов и Я не хочу иметь списки для всех тех лиц, в моей модели, если это не так, как это сделать конечно: D) *********** *********** РЕДАКТИРОВАТЬ ** я полностью пропустил список на ферме, которая была на самом деле, вызывая «странный» Foreign Key Farm_Id на пользователе. Это выглядит как отношение 1-к-1 для меня, где каждый ферма имеет пользователь. Что я должен сделать, чтобы настроить это так: My Farm имеет ссылку на пользователь, который не будет удален на Каскаде Моего Пользователь не содержит список всех ферм, он создал (потому что я, вероятно, хочу что-то для других субъектов и Я не хочу иметь списки для всех тех лиц, в моей модели, если это не так, как это сделать конечно: D) *********** *********** РЕДАКТИРОВАТЬ ** я полностью пропустил список на ферме, которая была на самом деле, вызывая «странный» Foreign Key Farm_Id на пользователе.
SEG.Veenstra
1

голосов
2

ответ
632

Просмотры

Visual Studio Entity Framework Мастер аварии на MySQL [дублировать]

Этот вопрос является точной копией: класс Entity Framework + MySQL, генерирующего 1 ответа Во время каких-либо действий с Entity мастером рамочного на связи MySQL - это дробит на второй странице без каких-либо ошибок. Проблема такая же, как в Entity Framework мастера аварий на MySQL Мы испробовали все советы от где и никто не помог. Мы попытались Visual Studio 2015 \ 2017 года несколько версий (сообщество, про, Ent), различные версии соединителя MySQL (6.8.x, 6.9.x и 6.10.x) и MySQL для Visual Studio различные версии 1.2.x MySQL сервер был использован также несколько версий: 5.7.20, 21 и так далее. Никакой успех на всех Logging для Visual Studio не также не помогает, ничего об этом аварии там. Один последняя не проверили точки - это отладка Ef6 для MySQL, но не ясно, как это помогает.
Igor Lemsky
1

голосов
1

ответ
55

Просмотры

The ObjectContext instance has been disposed - Is this thread safe?

У меня есть коллекция System.Threading.Timer, которые работают в фоновом режиме веб-приложение, которое периодически извлекать данные из БД для обновления кэша. Иногда (не часто), вызывает в БД не получится с ошибкой, например, как «Экземпляр ObjectContext были захоронены и больше не могут быть использованы для операций, требующих подключения». Похоже, что это иногда расположены в другом потоке, но при запуске каждого таймера, это будет создавать совершенно новый DbContext, так что я не уверен, как это может быть. Я использую StructureMap создать вложенный контейнер, так что он работает в изоляции, и я проверил, что это действительно создает новый DbContext для каждого таймера. вар а = новый А (); вар б = новый В (); вар timer1 = новый таймер (х => a.Update (контейнер), NULL, TimeSpan.Zero, TimeSpan.FromMinutes (60)); вар Таймер2 = новый таймер (х => b.Update (контейнер), NULL, TimeSpan.Zero, TimeSpan.FromMinutes (60)); общественный класс А {общественных недействительный Update (IContainer контейнер) {используя (вар nestedContainer = container.GetNestedContainer ()) {// Это создаст новый DbContext и будет захоронено // когда вложенная контейнер расположена репозиторий уага = nestedContainer.GetInstance (); // Иногда не удается здесь, когда это доступ к DbContext repository.GetStuff (); }}} Общественного класса B {общественного недействительными Обновление (IContainer контейнер) {использованием (вар nestedContainer = container.GetNestedContainer ()) {вар репозиторий = nestedContainer.GetInstance (); repository.GetStuff (); }}} Вот StructureMap конфигурации. Таким образом, всякий раз, когда создается хранилище будет создан новый завод, который в свою очередь создает новый MyDbContext. Для получения () HybridHttpOrThreadLocalScoped () .Использование (() => новый DbContextFactory ()).;
Tom
1

голосов
0

ответ
33

Просмотры

Entity Framework Основные - Отношения не сохраняются в то же время. Я должен сделать две вставки DB

Я пытаюсь сохранить реляционные данные в БД SQL - У меня есть parentEntity и childEntity parentEntity выглядит следующим образом: [Key] [DatabaseGenerated (DatabaseGeneratedOption.Identity)] [ForeignKey ( "ChildObject")] общественность ИНТ ParentObjectID {получить; задавать; } Общественного Guid ParentGUID {получить; задавать; } [Требуется] публичная строка Name {получить; задавать; } Ребенок лицо выглядит следующим образом: [Key] [DatabaseGenerated (DatabaseGeneratedOption.Identity)] общественного ИНТ ChildObjectID {получить; задавать; } Общественного ИНТ ParentObjectID {получить; задавать; } Публичная строка ChildName {получить; задавать; } Таким образом, вы можете видеть, что у ребенка есть FK родителя. Теперь, если я добавляю их в том же контексте: _familyContext.Parent.Add (ParentObject); _familyContext.Child.Add (ChildObject); _familyContext.SaveChanges (); Вкладыш не удается - я должен спасти родителей, затем получить EntityId и добавить его к ребенку, а затем спасти ребенка. Можно ли это сделать сразу?
iAmaDash

Просмотр дополнительных вопросов