• Как вызвать функцию определяющую фокус для Window?

    andrewpianykh
    @andrewpianykh
    Можно передавать в конструктор Window2 ссылку на экземпляр Window1. Например, так:

    private readonly Window1 window1;
    
    public Window2(Window1 window1)
    {
    	InitializeComponent();
    	this.window1 = window1;
    }


    Создавайте экземпляр Window2 (если создание происходит в Window1):
    Window2 open = new Window2(this);

    И после этого задавайте фокус для окна window1

    window1.Focus();
    -----------
    Иначе, можно покопаться в коллекции всех окон приложения через свойство Application.Current.Windows
    Ответ написан
    1 комментарий
  • Как настроить права доступа в файле web.config?

    andrewpianykh
    @andrewpianykh
    На мой взгляд в MVC лучше использовать AuthorizeAttribute

    [Authorize]
    public ActionResult Index()
    {
        ...
    }
    
    [Authorize (Users="admin")]
    public ActionResult Edit()
    {
        ...
    }
    Ответ написан
    4 комментария
  • Как создать копию мувиклипа?

    andrewpianykh
    @andrewpianykh
    Ответ написан
    Комментировать
  • Как запретить прокрутку dataGridView колесиком мыши?

    andrewpianykh
    @andrewpianykh
    Попробуйте в else задать значение свойства DataGridView.FirstDisplayedScrollingRowIndex (индекс первой отображаемой строки). Чтобы получить количество отображаемых строк используйте метод DataGridView.DisplayedRowCount.
    Ответ написан
    Комментировать
  • Правильно ли реализованы паттерны "Сессия" и "Репозиторий"?

    andrewpianykh
    @andrewpianykh
    На мой взгляд использование данных паттернов для EF излишне.


    A DbContext instance represents a combination of the Unit Of Work and Repository patterns such that it can be used to query from a database and group together changes that will then be written back to the store as a unit.

    msdn.microsoft.com
    Ответ написан
  • Какой выбрать мониторинг серверов?

    andrewpianykh
    @andrewpianykh
    New Relic - вполне функциональный, простой в использовании, есть бесплатный тариф, поддержка плагинов, оповещения...
    Для проверки доступности неплох uptimerobot.
    Ответ написан
    Комментировать
  • Как написать расширение метода для EF6?

    andrewpianykh
    @andrewpianykh
    Реализуйте для модели интерфейс IEntity, чтобы в методе расширения использовать ограничение универсального типа:

    public interface IEntity
    {
    	int Id { get; set; }
    }
    
    public class Model : IEntity
    {
    	public int Id { get; set; }        
    	// ...
    }


    public static bool ExistById<T>(this DbSet<T> source, int id) where T : IEntity
    {
    	return source.Count(c => c.Id == id) > 0;
    }
    Ответ написан
    3 комментария
  • Не загружается значение свойств в EF6. В чем проблема?

    andrewpianykh
    @andrewpianykh
    Поправьте модель:

    public class User
    {
    	public int Id {get;set;}
    
    	public string FirstName {get;set;}
    
    	public string SecondName {get;set;}
    
    	public DateTime DateOfBirth {get;set;}
    
    	public string Email {get;set;}
    
    	public string Password {get;set;}
    
    	public virtual Token Token { get; set; }
    	
    	public int TokenId { get; set; }
    }
    Ответ написан
    Комментировать
  • Валидация в wpf?

    andrewpianykh
    @andrewpianykh
    Обрабатывайте событие TextChanged, например, так:

    private void textBox_TextChanged(object sender, TextChangedEventArgs e)
    {
    	var index = textBox.CaretIndex;
    	textBox.Text = Regex.Replace(textBox.Text, @"\d", "");
    	textBox.CaretIndex = index;	
    }
    Ответ написан
    Комментировать
  • Как в Visual Studio проверять грамматические ошибки при написании русскоязычных слов?

    andrewpianykh
    @andrewpianykh
    Используйте расширение Visual Studio Spell Checker
    Поддерживаются словари OpenOffice https://github.com/EWSoftware/VSSpellChecker/wiki/...
    Ответ написан
    Комментировать
  • Почему не работает связь много-ко-многим?

    andrewpianykh
    @andrewpianykh
    В Вашем случае явно создавать таблицу связей не нужно, она будет создана автоматически

    public class College
        {
            public int? AccrLevel { get; set; }
    
            public string Address { get; set; }
    
            public virtual Area Area { get; set; }
    
            public int AreaId { get; set; }
    
            public bool? Demo { get; set; }
    
            public virtual Director Director { get; set; }
    
            public int DirectorId { get; set; }
    
            public string Email { get; set; }
    
            public bool? Full { get; set; }
    
            [Key]
            public int CollegeId { get; set; }
    
            public string Locality { get; set; }
    
            public virtual LocalityType LocalityType { get; set; }
    
            public int LocalityTypeId { get; set; }
    
            public string Name { get; set; }
    
            public string Phone { get; set; }
    
            public string Site { get; set; }
    
            public virtual ICollection<Speciality> Specialities { get; set; }
    
            public virtual Status Status { get; set; }
    
            public int? StatusId { get; set; }
    
            public virtual University University { get; set; }
    
            public int? UniversityId { get; set; }
        }
    
        public class Speciality
        {
            public virtual ICollection<College> Colleges { get; set; }
    
            [ForeignKey("DirectionCode")]
            public virtual Direction Direction { get; set; }
    
            public string DirectionCode { get; set; }
    
            public string Name { get; set; }
    
            [Key]
            public string SpecialityCode { get; set; }
        }


    Подробнее: www.entityframeworktutorial.net/code-first/configu...
    Ответ написан
  • DataGrid номер строки?

    andrewpianykh
    @andrewpianykh
    Вы можете получить строку по номеру используя индексатор:

    var rowIndex = 2;  // индекс первой строки равен 0
    var row = (SomeType)DataGrid.Items[rowIndex];
    row.SomeProperty = "...";
    Ответ написан
    Комментировать
  • Как работать со связью много-ко-многим в контроллере?

    andrewpianykh
    @andrewpianykh
    Как строка может сравниваться со списком строк?

    Используйте методы Contains и Count чтобы проверить наличие строки в списке.

    var list = new List<string>() { "one", "two", "three", "four" };
    var expected = "two";
    var result = list.Contains(expected);
    // либо
    result = list.Count(a => a == expected) > 0;


    В Вашем случае, например так:

    var regions = new List<string>() { "region 1", "region 2", "region 3", "region 4" };
    repository.Colleges.Where(college => regions.Count(a =>  a == college.Area.Region.Name) > 0);
    Ответ написан
    Комментировать
  • Передать несколько переменных в Parallel.ForEach?

    andrewpianykh
    @andrewpianykh
    /*А нельзя ли просто объединить эти параметры в одну сущность, например так:
    class Prox
    {
        public string[] Prox1 {get;set;}
        public int[] Prox2 {get;set;}
    }*/


    Если количество строк в массивах равно, попробуйте, например так:

    var items = new List<KeyValuePair<string, string>>();
    
    for (int i = 0; i < Prox.Length; i++)
    {
    	items.Add(new KeyValuePair<string, string>(Prox[i], accitem[i]));
    }
    
    // с использованием Parallel, если массивы очень огромные
    // Parallel.For(0, prox.Length, i => items.Add(new KeyValuePair<string, string>(Prox[i], accitem[i])));
    
    Parallel.ForEach(items, options, p => indieroyale(p.Key, p.Value));


    Можно заменить KeyValuePair на свой класс, с двумя полями string, сути это не меняет.

    UPD: Да и вообще, зачем Вам Parallel.ForEach? Делайте все через Parallel.For, без всяких объединений:

    Parallel.For(0, Prox.Length, options, i => indieroyale(Prox[i], accitem[i]));
    Ответ написан
    4 комментария
  • Как сделать окно приложения C# невидимым и не показывать в трее?

    andrewpianykh
    @andrewpianykh
    Можно создать WPF приложение.
    В конструкторе главного окна добавить следущее:

    public MainWindow()
    {
    	InitializeComponent();
    
    	ShowInTaskbar = false;
    	Hide();
    }
    Ответ написан
    Комментировать
  • Допустимо ли использовать элемент schema.org в моем случае?

    andrewpianykh
    @andrewpianykh
    Нет, не допустимо. Согласно описания schema.org/Recipe данная разметка применяется непосредственно для описания рецепта приготовления блюда / еды.
    Например, описание свойств cookingMethod, nutrition, recipeCuisine прямо об этом говорит.

    Альтернатив, на первый взгляд, не видно. Посмотрите расширения, например, типы из schema.org/docs/meddocs.html, либо используйте более общие типы.
    Ответ написан
    Комментировать
  • Как привязать отображаемые данные в DataGrid(wpf) к БД?

    andrewpianykh
    @andrewpianykh
    dataGrid.ItemsSource = dataFromMySql;
    
    var timer = new System.Windows.Threading.DispatcherTimer();
    timer.Tick += (oe,e)=> dataGrid.Items.Refresh(); 
    /* или  */
    /* timer.Tick += (oe,e)=> { dataGrid.ItemsSource = null; dataGrid.ItemsSource = dataFromMySql; } */
    timer.Interval = new TimeSpan(0,0,10);
    timer.Start();
    Ответ написан
    Комментировать
  • Как обработать все ошибки (перехваченные и неперехваченные) в ASP.Net MVC?

    andrewpianykh
    @andrewpianykh
    Я предпочитаю следующий подход:

    1. Создаем контроллер ErrorController, например так:

    public class ErrorController
    {
    	public virtual ActionResult BadRequest()
    	{
    		return View();
    	}
    
    	public virtual ActionResult Forbidden()
    	{
    		return View();
    	}
    
    	public virtual ActionResult Index()
    	{
    		return View();
    	}
    
    	public virtual ActionResult NotFound()
    	{
    		return View();
    	}
    }


    2. Добавляем вьюхи

    3. Создаем свой расширенный HandleErrorAttribute, например так:

    public class ExtHandleErrorAttribute : HandleErrorAttribute
    {
    	//private readonly ILogger logger;
    
    	public ExtHandleErrorAttribute(/*ILogger logger*/)
    	{
    		//this.logger = logger;
    	}
    
    	public override void OnException(ExceptionContext filterContext)
    	{
    		if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
    		{
    			return;
    		}
    
    		if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500)
    		{
    			return;
    		}
    
    		if (!ExceptionType.IsInstanceOfType(filterContext.Exception))
    		{
    			return;
    		}
    
    		if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
    		{
    			filterContext.Result = new JsonResult
    			{
    				JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    				Data = new
    				{
    					error = true,
    					message = filterContext.Exception.Message
    				}
    			};
    		}
    		else
    		{
    			var controllerName = (string)filterContext.RouteData.Values["controller"];
    			var actionName = (string)filterContext.RouteData.Values["action"];
    			var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
    
    			filterContext.Result = new ViewResult
    			{
    				ViewName = View,
    				MasterName = Master,
    				ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
    				TempData = filterContext.Controller.TempData
    			};
    		}
    
    		//var e = filterContext.Exception;
    		//logger.Error(e, e.Message);
    
    		filterContext.ExceptionHandled = true;
    		filterContext.HttpContext.Response.Clear();
    		filterContext.HttpContext.Response.StatusCode = 500;
    		filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    	}
    }


    4. Регистрируем глобальный фильтр:
    public class FilterConfig
    {
    	public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    	{
    		var extHandleErrorAttribute = DependencyResolver.Current.GetService<ExtHandleErrorAttribute>();// new ExtHandleErrorAttribute();
    		filters.Add(extHandleErrorAttribute);
    	}
    }


    5. В Global.asax.cs добавляем метод Application_Error:

    protected void Application_Error(object sender, EventArgs e)
    {
    	var httpContext = ((MvcApplication)sender).Context;
    
    	var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
    	var currentController = " ";
    	var currentAction = " ";
    
    	if (currentRouteData != null)
    	{
    		if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString()))
    		{
    			currentController = currentRouteData.Values["controller"].ToString();
    		}
    
    		if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString()))
    		{
    			currentAction = currentRouteData.Values["action"].ToString();
    		}
    	}
    
    	var ex = Server.GetLastError();
    
    	var controller = new ErrorController();
    	var routeData = new RouteData();
    	var action = "Index";
    
    	if (ex is HttpException)
    	{
    		var httpEx = ex as HttpException;
    
    		switch (httpEx.GetHttpCode())
    		{
    			case 404:
    				action = "NotFound";
    				break;
    
    			case 403:
    				action = "Forbidden";
    				break;
    
    			case 400:
    				action = "BadRequest";
    				break;
    
    			default:
    				action = "Index";
    				//var logger = DependencyResolver.Current.GetService<ILogger>();
    				//logger.Error(ex, ex.Message);
    				break;
    		}
    	}
    
    	httpContext.ClearError();
    	httpContext.Response.Clear();
    	httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500;
    	httpContext.Response.TrySkipIisCustomErrors = true;
    	routeData.Values["controller"] = "Error";
    	routeData.Values["action"] = action;
    
    	controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction);
    	((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));
    }


    6. В web.config добавляем в system.web
    <customErrors mode="On" />

    также в system.webServer можно добавить:

    <httpErrors>
      <remove statusCode="400" subStatusCode="-1" />
      <remove statusCode="403" subStatusCode="-1" />
      <remove statusCode="502" subStatusCode="-1" />
      <remove statusCode="501" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="400" prefixLanguageFilePath="" path="/Error/BadRequest" responseMode="ExecuteURL" />
      <error statusCode="404" prefixLanguageFilePath="" path="/Error/NotFound" responseMode="ExecuteURL" />
      <error statusCode="500" prefixLanguageFilePath="" path="/Error" responseMode="ExecuteURL" />
      <error statusCode="501" prefixLanguageFilePath="" path="/Error" responseMode="ExecuteURL" />
      <error statusCode="502" prefixLanguageFilePath="" path="/Error" responseMode="ExecuteURL" />
      <error statusCode="403" prefixLanguageFilePath="" path="/Error/Forbidden" responseMode="ExecuteURL" />
    </httpErrors>
    Ответ написан
    Комментировать
  • Что за ошибка при запуске VS 2013?

    andrewpianykh
    @andrewpianykh
    Попробуйте удалить папку c:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\AppData\Local\Microsoft\VisualStudio\13.0\
    Ответ написан
    1 комментарий
  • ASP .NET MVC Entity Framework в чем ошибка и как исправить?

    andrewpianykh
    @andrewpianykh
    В Вашем случаем можно упростить код и обойтись без указания атрибутов:

    public class Area // Район
    {
    	public int Id { get; set; }
    	public string Name { get; set; }
    	public int RegionId { get; set; }		
    	public virtual Region Region {get; set;}
    	public byte[] Map { get; set; }
    }
    
    public class Region // Область
    {
    	public int Id { get; set; }
    	public string Name { get; set; }
    	public byte[] Map { get; set; }
    }


    иначе:

    public class Area // Район
    {
    	[Key]
    	public int AreaId { get; set; }
    	public string Name { get; set; }
    	public int RegionId { get; set; }	
    	[ForeignKey("RegionId")] 	
    	public virtual Region Region {get; set;}
    	public byte[] Map { get; set; }
    }
    
    public class Region // Область
    {
    	[Key]
    	public int RegionId { get; set; }
    	public string Name { get; set; }
    	public byte[] Map { get; set; }
    }


    Подробнее
    www.entityframeworktutorial.net/code-first/foreign...
    https://msdn.microsoft.com/ru-ru/data/gg193958.aspx
    andrey.moveax.ru/post/mvc3-in-depth-entity-framewo...
    Ответ написан
    1 комментарий