1

голосов
2

ответ
0

Просмотры

Является нетипизированным .net DataSet утка напечатал DTO?

Хорошо, я доступ к полям строки данных внутри набора данных с помощью шаговых, но давайте рассмотрим это, как только синтаксическую функцию. Вы бы пойти так далеко, и называть это утка типизированного вещь, которая сводится к добытчиками и сеттеров, другими словами, передача данных объекта?
Marc Wittke
1

голосов
2

ответ
181

Просмотры

Entity Framework Ядро на SQL Server: В противном случае для удаления необязательно самостоятельно ссылки записи

Учитывая базу данных, отслеживания лиц и их дополнительного супруга в качестве самостоятельной ссылки внешнего ключа: общественный класс Person {общественности Int Id {получить; задавать; } Публичная строка Name {получить; задавать; } Общественного ИНТ? SpouseId {получить; задавать; }} Entity Framwork Ядро DbContext выглядит так, обратите внимание на DeleteBehavior.SetNull: PersonsContext общественного класса: DbContext {общественных PersonsContext (опции DbContextOptions): базу (опция) {} общественного DbSet Лицо {получить; задавать; } Защищены переопределение недействительного OnModelCreating (ModelBuilder MODELBUILDER) {base.OnModelCreating (MODELBUILDER); MODELBUILDER .Entity () .HasOne (TypeOf (Персона)) .WithOne () .HasForeignKey (TypeOf (лицо), nameof (Person.SpouseId)) .IsRequired (ложь) .OnDelete (DeleteBehavior.SetNull); }} Это не даже генерировать модель. Ошибка говорит: введение ограничения внешнего ключа «FK_Persons_Persons_SpouseId» на столе «Лицо» может вызвать циклы или несколько путей порогов. Укажите ON УДАЛИТЬ NO ACTION или ON UPDATE NO ACTION или изменять другие ограничения FOREIGN KEY. Хорошо, вторая попытка. Мы заботиться о нарушении ссылки на нашем собственном. FK будет смоделирован с DeleteBehavior.Restrict: PersonsContext общественного класса: DbContext {общественных PersonsContext (опции DbContextOptions): базовые (варианты) {} общественного DbSet Лицо {получить; задавать; } Защищены переопределение недействительного OnModelCreating (ModelBuilder MODELBUILDER) {base.OnModelCreating (MODELBUILDER); MODELBUILDER .Entity () .HasOne (TypeOf (Person)) .WithOne (). HasForeignKey (TypeOf (лицо), nameof (Person.SpouseId)) .IsRequired (ложь) .OnDelete (DeleteBehavior.Restrict); }} Простой тест пытается обнулять ссылку с обеих сторон, а затем удаляет женатого человека, в результате чего другого человека без SpouseId: [Факт] общественного недействительными Manually_Remove_Reference () {используя (вар personsContext = новые PersonsContext (DbContextOptions)) {вар его = новый Person {Id = 1, Name = "его", SpouseId = 2}; вар ее = новый Person {Id = 2, Name = "Ее", SpouseId = 1}; personsContext.Persons.Add (его); personsContext.Persons.Add (ей); personsContext.SaveChanges (); }, Используя (VAR = personsContext новые PersonsContext (DbContextOptions)) {вар его = personsContext.Persons.Find (1); вар ее = personsContext.Persons. Найти (2); him.SpouseId = NULL; her.SpouseId = NULL; personsContext.Persons.Remove (его); personsContext.SaveChanges (); } С помощью (вар personsContext = новые PersonsContext (DbContextOptions)) {Assert.Null (personsContext.Find (1)); }} В результате в: System.InvalidOperationException: Невозможно сохранить изменения, так как циклическая зависимость была обнаружена в данных, которые будут сохранены: 'ForeignKey: Person {' SpouseId '} -> Person {' Id '} Уникальный, ForeignKey: Person {' SpouseId '} -> Person {' Id '} Уникальный'. Трассировка стека: на Microsoft.EntityFrameworkCore.Internal.Multigraph`2.BatchingTopologicalSort (Func`2 formatCycle) в Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.TopologicalSort (команды IEnumerable`1) при Microsoft.EntityFrameworkCore. ChangeTracking.Internal.StateManager.SaveChanges (Boolean acceptAllChangesOnSuccess) в Microsoft.EntityFrameworkCore.DbContext.SaveChanges (Boolean acceptAllChangesOnSuccess) в Microsoft.EntityFrameworkCore.DbContext.SaveChanges () в Persistence.Tests.UnitTest1.Manually_Remove_Reference () в C: \ Users \ MarcWittke \ источник \ блокнотная \ Persistence \ Persistence.Tests \ UnitTest1.cs: строка 58 Добавление больше SaveChanges () после того, как обнулять ссылки не делает разницы. Что действительно работает, это: нарушение ссылки в отдельном DbContext, например, сохранить его, открыв новый и удаление записи. Но это не будет атомным больше. Полный код: https://github.com/marcwittke/DeletingOptionallySelfReferencedRecord SaveChanges (Boolean acceptAllChangesOnSuccess) при Microsoft.EntityFrameworkCore.DbContext.SaveChanges () в Persistence.Tests.UnitTest1.Manually_Remove_Reference () в C: \ Users \ MarcWittke \ \ источник блокнота \ Постоянство \ Persistence.Tests \ UnitTest1.cs: строка 58 Добавление больше SaveChanges () после обнуления ссылки не делает разницы. Что действительно работает, это: нарушение ссылки в отдельном DbContext, например, сохранить его, открыв новый и удаление записи. Но это не будет атомным больше. Полный код: https://github.com/marcwittke/DeletingOptionallySelfReferencedRecord SaveChanges (Boolean acceptAllChangesOnSuccess) при Microsoft.EntityFrameworkCore.DbContext.SaveChanges () в Persistence.Tests.UnitTest1.Manually_Remove_Reference () в C: \ Users \ MarcWittke \ \ источник блокнота \ Постоянство \ Persistence.Tests \ UnitTest1.cs: строка 58 Добавление больше SaveChanges () после обнуления ссылки не делает разницы. Что действительно работает, это: нарушение ссылки в отдельном DbContext, например, сохранить его, открыв новый и удаление записи. Но это не будет атомным больше. Полный код: https://github.com/marcwittke/DeletingOptionallySelfReferencedRecord строка 58 Добавление большего количества SaveChanges () после того, как обнулять ссылки не делает разницы. Что действительно работает, это: нарушение ссылки в отдельном DbContext, например, сохранить его, открыв новый и удаление записи. Но это не будет атомным больше. Полный код: https://github.com/marcwittke/DeletingOptionallySelfReferencedRecord строка 58 Добавление большего количества SaveChanges () после того, как обнулять ссылки не делает разницы. Что действительно работает, это: нарушение ссылки в отдельном DbContext, например, сохранить его, открыв новый и удаление записи. Но это не будет атомным больше. Полный код: https://github.com/marcwittke/DeletingOptionallySelfReferencedRecord
Marc Wittke
1

голосов
1

ответ
257

Просмотры

Почему этот XUnit тест тупик (на одном процессоре VM)?

Запуск следующего испытания на одном процессоре VM (Ubuntu 18,4) с использованием системы; используя System.Threading; используя System.Threading.Tasks; используя XUnit; . Открытый класс AsyncStuffTest {[Факт] общественные недействительный AsyncTest () {SomethingAsync () Подождите (); } Частные статических задач асинхронной SomethingAsync () {Console.WriteLine ( "перед петлей асинхронной ..."); ждут Task.Factory.StartNew (() => {для (INT I = 0; г <10; я ++) {Console.WriteLine ( "в цикле асинхронном ..."); Thread.Sleep (500);}}) ; Console.WriteLine ( "после того, как в асинхронной петле ..."); }} Приводит к следующим образом: Сборка началась, пожалуйста, подождите ... Строить завершено. Тестовый прогон для /home/agent/fancypants/bin/Debug/netcoreapp2.1/fancypants.dll(.NETCoreApp,Version=v2.1) Microsoft (R) Выполнение теста Command Line Tool Version 15.7.0 Copyright (с) Microsoft Corporation , Все права защищены. Запуск выполнения теста, пожалуйста, подождите ... до того цикла асинхронного ... в цикле асинхронной ... в цикле асинхронной ... в цикле асинхронной ... в цикле асинхронной ... в цикле асинхронной ... в цикле асинхронной .. . в цикле асинхронной ... в цикле асинхронной ... в цикле асинхронной ... в цикле асинхронной ... процесс кажется тупиковой ситуация и никогда не переходит к ожидаемому выходу после цикла асинхронного ... Запуск на моих DEV машины все работает хорошо. Примечание: Я знаю о возможности тестирования асинхронном в XUnit. Это более или менее вопрос интереса. Тем более, что эта проблема касается только XUnit, консольное приложение прекращает нормально:
Marc Wittke
6

голосов
6

ответ
8.8k

Просмотры

Как получить пользовательские атрибуты из сборки, которая не является (на самом деле) загружается

Мы все знаем, что сборка может быть запрошена для атрибутов с использованием метода GetCustomAttributes. Я хочу, чтобы использовать эту функцию, чтобы определить модуль расширения для моего приложения. Однако, чтобы избежать загрузки каждой сборки я предпочитаю оборонительный подход: с помощью Assembly.ReflectionOnlyLoadFrom, чтобы получить более подробную информацию о сборке (есть это мой ModuleAttribute?), Если ModuleAttribute найден, я, наконец, загрузить его с помощью Assembly.LoadFrom К сожалению, кажется, что нет никакого способа, чтобы получить атрибуты сборки, который загружается в контекст только для отражения: myAssembly.GetCustomAttributes (TypeOf (ModuleAttribute), ложный) не с InvalidOperationException ( "это незаконно, чтобы подумать о пользовательских атрибутах Тип загружен с помощью ReflectionOnlyGetType ") и CustomAttributeData. GetCustomAttributes (MyAssembly) терпит неудачу с ReflectionTypeLoadException из-зависимых сборок не загружены. Итак, как получить атрибуты, не загрязняя мой домен приложения ненужными (может быть вредным) типов, вызвав Assembly.LoadFrom необходимость загрузки всех упомянутых Ассамблей необходимость в отдельных областях применения (дал ему короткую попытку, пахла еще более PITA)?
Marc Wittke
12

голосов
8

ответ
2.8k

Просмотры

Как разбить общеязыковой среды выполнения .NET (CLR) в чистом Нетто

Существует аналогичный вопрос ориентации на Java VM, но я не нашел вопрос для .net (Пожалуйста, закройте и пометить как дубликат, если я что-то отсутствует). Так что - это возможно без неприятного неуправляемого Interop? И с грохотом я имею в виду настоящий «xxx.exe перестал работать» не StackOverflow- или OutOfMemoryException. Я думаю, что это не возможно, кроме случаев, когда попав ошибка в самой VM.
Marc Wittke
2

голосов
1

ответ
340

Просмотры

Является часто срабатывают веб-задание CRON Azure запускается второй раз, когда она работает дольше, чем настроенные частоты

Давайте предположим, что на triggerd работы через CRON каждые пять минут. По какой-то причине, один исполнение в 10:00 значительно дольше длится, например, 8 минут. Событие происходит второй экземпляр в 10:05? Если да, то это правильная стратегия, чтобы убедиться, что работа выполняется как синглтон и никогда дважды?
Marc Wittke
6

голосов
3

ответ
3.2k

Просмотры

Как реализовать ленивый заряженное Silverlight сетки данных без использования подкачки

Использование шаблона бизнес-приложений с новенькой выпущенном RIA Services, вы можете увидеть много примеров использования сетки данных на вершине DomainDataSource в сочетании с DataPager. Свойства PAGESIZE и LoadSize могут быть использованы для корректировки количества данных, которые будут отображаться на одной странице и данные, упреждающая выборка в фоновом режиме. Теперь я хотел бы иметь сетку данных с полосой прокрутки и без пейджера. Базовый DomainDataSource следует загружать только те данные, отображаемые в сетке. Это должно вызвать другую нагрузку, когда пользователь прокручивает вниз к элементам, которые еще не в контексте данных. Есть ли пример реализации, как это сделать?
Marc Wittke
2

голосов
1

ответ
127

Просмотры

Попытка сослаться на портативную библиотеку с SlSvcUtil.exe

Может кто-то подтвердить, что / ссылка переключатель не работает с slsvcutil.exe, когда я указываю на портативные библиотеки? Кажется, что он просто игнорирует типы, представленные в портативной библиотеке и создает свои собственные классы в Reference.cs, что приводит к дублированию типов в проекте SilverLight, который ссылается на портативную библиотеке. Есть ли причина, почему она не должна работать?
Marc Wittke
3

голосов
1

ответ
2.4k

Просмотры

Как реализовать многоканальный предварительный аудио микшер в .net

Я хотел бы использовать C # для выполнения приложения, которое может играть несколько звуковых потоков одновременно. Арахис - теперь самое интересное: при условии, каждый поток одиночный канал (моно) Я хочу, чтобы отрегулировать громкость для каждого громкоговорителя (5.1 или даже 7.1) для каждого потока отдельно. Я могу использовать смеситель окна, чтобы сделать это, но проблема в том, что есть только один смеситель, и я хочу, чтобы настроить это для каждого потока отдельно. Любые идеи, как это реализовать? Моя первая догадка мультиплексирование потока в восемь раз (7.1), примените уровень громкости для каждого «канала», а затем отправить его в смеситель окна, которая выровнена для всех каналов на 80%, например. Знаете ли вы какие-либо библиотеки, которые могли бы поддержать такой случай использования? AFAIK бас и FMOD не может это сделать, но поправьте меня, если я ошибаюсь. Как альтернатива, я думал о взломе XNA для этого: с использованием вектора, который описывает позицию потока, связанного с слушателем и использовать это, чтобы применить объем компенсации ... просто бред. (И, пожалуйста, не указывают мне на некоторые C ++ / WinAPI идеи по этому вопросу, этот проект не стоит изучать другой язык в настоящее время.)
Marc Wittke
2

голосов
0

ответ
156

Просмотры

Automapper condition fallback

Context: RESTful ASP.NET Core Web API using AutoMapper 5.1.1. I'm trying to achieve a generic way to expand referenced resources when the client requests it. E.g.: GET /api/Products/4711 returns { "id":"4711", "productName":"flux capacitor", "category": { "id": "42", "obj": null, } } while GET /api/Products/4711?expand=category should return { "id":"4711", "productName":"flux capacitor", "category": { "id": "42", "obj": { id:"42", name: "time travelling", isRestricted: true, }, } } So far I managed to get to the point that it works by 1. creating this class used as property in my resource: public class ExpandableReference { public int Id { get; set; } public TResource Obj { get; set; } } 2. This implementation of ITypeConverter (notice the use of my generic repository, that is successfully being injected here): public class ReferenceExpander : ITypeConverter where TAggregateRoot : AggregateRoot { private readonly IRepository repository; public ReferenceExpander(IRepository repository) { this.repository = repository; } public ExpandableReference Convert( int source, ExpandableReference destination, ResolutionContext context) { destination = destination ?? new ExpandableReference(); destination.Id = source; destination.Obj = ExpandReference(source, context); return destination; } private TResource ExpandReference(int source, ResolutionContext context) { TAggregateRoot aggregateRoot = repository.SingleOrDefault(source); TResource resource = context.Mapper.Map(aggregateRoot); return resource; } } 3. providing this mapping configuration CreateMap(typeof(int), typeof(ExpandableReference)).ConvertUsing(typeof(ReferenceExpander)); ForAllPropertyMaps( map => map.SourceType == typeof(int) && map.DestinationPropertyType.GetGenericTypeDefinition() == typeof(ExpandableReference), (map, expression) => expression.Condition((agg, res, _, __, ctx) => ctx.ShouldExpand(map.DestinationProperty.Name))); where ctx.ShoudExpand(string) checks, whether the Items dictionary of ctx contains the destination property name. The controller is in charge of adding it when it comes to mapping from my domain object to a resource. now the issue GET /api/Products/4711 returns { "id":"4711", "productName":"flux capacitor", "category": null // what?!?! } with category = null because the condition says it should be omitted during mapping. What I need is a kind of fallback like this: ForAllPropertyMaps( map => map.SourceType == typeof(int?) && map.DestinationPropertyType.GetGenericTypeDefinition() == typeof(OptionalExpandableReference), (map, expression) => expression .Condition((agg, res, _, __, ctx) => ctx.ShouldExpand(map.DestinationProperty.Name)) .Fallback(/*tell AutoMapper to just map the id, omit the obj*/)); Moving the condition logic into the ITypeConverter implementation won't work, because there is no access to the target member name. Using two mappings won't work either, because AutoMapper is not designed to work this way. Would be a smart solution if we could inject an IMapSelectionStrategy with access to the MappingContext during configuration. Using an IValueResolver instead of an ITypeConverter cuts the nice way of configuration using open generics Ideas? By the way: What could I expect and when does something other than null appears in the third and forth parameter of expression.Condition((agg, res, ???, ???, ctx). I've never seen anything different than null.
Marc Wittke
1

голосов
3

ответ
191

Просмотры

Есть ли способ поставить утверждение о событии?

Могу ли я проверить утверждение, что событие было уволено? Что-то вроде этого: [TestMethod] общественный недействительный EventFiresWhenChangingProperty () {вара = новый сут SystemUnderTest (); вар eventRegister = новый EventRegister (sut.PropertyChanged); sut.AnyProperty = "новое значение"; Assert.EventWasFired (eventRegister); } Конечно, я мог бы создать обработчик событий, который помещает некоторые записи в контексте тестирования или в переменной экземпляра, который только для чтения этого конкретного теста, но это кажется немного слишком много сантехники. Я ищу что-то вроде кода выше.
Marc Wittke
2

голосов
2

ответ
1.2k

Просмотры

Assembly.CodeBase: когда нет это не файл-URI?

Assembly.Location дает простой путь к сборке. К сожалению, это пустое при работе в затененной среде, такие как модульное тестирование или ASP.NET. Hovever, свойство Codebase доступен и предоставляет URI, который может использоваться вместо этого. В каких случаях он не возвращает URI, начиная с файлом: ///? Или другими словами: каковы случаи, в которых это не будет работать или будет возвращать непригодные результаты? Сборка Сборка = GetType () Сборка. Ури codeBaseUri = новый Ури (assembly.CodeBase); строка пути = codeBaseUri.LocalPath;
Marc Wittke
2

голосов
1

ответ
906

Просмотры

Инструменты Visual Studio Tools для Office (VSTO) версия путаницы

Может кто-нибудь просветить меня о версии привязок между VSTO и целевой офисной версии? Я использую VS2008 с VSTO 3.0 для создания и развертывания надстройку для Outlook 2003. Я полностью путать о том, что требуется на целевом компьютере: VSTO 2005 SE выполнения или VSTO 3,0 выполнения? .NET Framework 2.0 или 3.5 Primary Interop сборки из Office 2003 (я думаю) В конце концов, я должен сказать, отдел ИТ заказчика, как развернуть надстройку, используя свою собственную систему deloyment на основе сценария. Они не хотят иметь пакет MSI.
Marc Wittke
2

голосов
2

ответ
3.2k

Просмотры

ASP.Net Core middleware cannot set status code on exception because “response has already started”

Связанное: Изменение статического ответа файла в ASP.NET Ядре Однако, я не понимаю, почему следующий код работает, когда мой бизнес-логика бросает один из моих пользовательских исключений как UnprocessableException: попробуйте {ждет next.Invoke (контекст); } Задвижка (UnprocessableException UEX) {Logger.Warn (UEX); context.Response.StatusCode = 422; вар responseContent = JsonConvert.SerializeObject (новый {uex.Message}); ждут context.Response.WriteAsync (responseContent); } // более конкретные исключения, приводящие к HTTP 4xx статус, но когда совершенно неожиданно IndexOutOfRangeException пойман последний поймать блок в цепи поймать (Exception ех) {Logger.Error (бывший); context.Response.StatusCode = (целое) HttpStatusCode.InternalServerError; вар responseContent = env.IsDevelopment ()? JsonConvert. SerializeObject (новый {ex.Message, ex.StackTrace}): JsonConvert.SerializeObject (новое сообщение {= "Внутренняя ошибка"}); ждут context.Response.WriteAsync (responseContent); } Это исключение при попытке установить код статуса: System.InvalidOperationException: StatusCode не может быть установлен, реакция уже началась. Bei Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.ThrowResponseAlreadyStartedException (строковое значение) Bei Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.set_StatusCode (значение Int32) Bei Microsoft.AspNetCore.Server.Kestrel.Internal .Http.Frame.Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.set_StatusCode (Int32 значение) Bei Microsoft.AspNetCore.Http.Internal.DefaultHttpResponse.set_StatusCode (Int32 значение) Bei Anicors.Infrastructure.
Marc Wittke
5

голосов
2

ответ
4.3k

Просмотры

Отладка с помощью Visual Studio 2012, Windows 8 и управления учетными записями пользователей

Прежде всего - это все о версиях RTM. И Windows 8 имеет некоторые изменения, касающиеся контроля учетных записей, как мы все узнали из http://www.brianbondy.com/blog/id/140/, он не может быть отключен побочный эффект бесплатно. Теперь проблема начинается: Наше главное приложение требует повышенных привилегий (по крайней мере, серверная часть). Отладка будет работать только при работе с VS в повышенном режиме, тоже. Но когда я начинаю проект Silverlight в повышенном режиме VS, ИЭ разжег для отладки запускается, как с обычными привилегиями и отладки не возможно. Для того, чтобы сделать вещи более сложными, мы не бежим решения со всеми (700 +) проектов загружены, но делать много нашего Dev-материала (компиляция, запуск, тестирование) в командной строке. Какой должна быть поднята, тоже. Что такое правильная конфигурация UAC для этой цели: Я хочу, чтобы иметь возможность отладки Silverlight приложения, работающие в Internet Explorer, приложения любого типа начатой ​​VS «F5», серверный процесс запускается из командной строки и (возможно) C # / XAML Metro-приложения? В Windows 7 это было просто отключить контроль учетных записей и все в порядке. Теперь я чувствую, что борьба с моим собственным набором инструментов и имею плохое предчувствие. И пожалуйста - не говорите мне, что UAC является важным и полезным. Я полностью в порядке с этим, но для разработчика вещи немного отличаются. И пожалуйста - не говорите мне, что UAC является важным и полезным. Я полностью в порядке с этим, но для разработчика вещи немного отличаются. И пожалуйста - не говорите мне, что UAC является важным и полезным. Я полностью в порядке с этим, но для разработчика вещи немного отличаются.
Marc Wittke