Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2

Дублируются регионы

07.07.2016, 19:08. Показов 983. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public ActionResult Register(RegisterViewModel vm)
        {
            if(this.Context.Users.Any(u => u.Email == vm.Email))
            {
                ModelState.AddModelError(String.Empty, "Пользователь с таким адресом уже существует");
            }
 
            if (ModelState.IsValid)
            {
                var region = Context.Regions.Find(vm.RegionId);
                var premium = DateTime.Now;
 
                Mapper.CreateMap<RegisterViewModel, ApplicationUser>()
                    .ForMember(dst => dst.UserName, ext => ext.MapFrom(src => src.Email))
                    .ForMember(dst => dst.Email, ext => ext.MapFrom(src => src.Email))
                    .ForMember(dst => dst.Region, ext => ext.MapFrom(src => region))
                    .ForMember(dst => dst.EndPremiumDateTime, ext => ext.MapFrom(src => premium));
 
                var user = Mapper.Map<RegisterViewModel, ApplicationUser>(vm);
 
                var result = this.UserManager.Create(user, vm.Password);
 
                this.UserManager.AddToRole(user.Id, "User");
 
                if (result.Succeeded)
                {
                    this.SignInManager.SignIn(user, isPersistent:false, rememberBrowser:false);
                    
                    return RedirectToAction("Index", "Home");
                }
 
                //AddErrors(result);
            }
 
            ViewBag.RegionId = new SelectList(Context.Regions, "Id", "Name", vm.RegionId);
 
            return View(vm);
        }
Я уже не знаю что делать, может кто подскажет, может у кого такое было, после регистрации дублируется регион и вроде все нормально, ребят помогите, подскажите, что я делаю не так.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2016, 19:08
Ответы с готовыми решениями:

Дублируются комментарии при выводе из базы данных
так как я начинающий программист это моё хоби у меня есть код для вывода комментариев string serverName = &quot;&quot;; // Адрес сервера...

Регионы в Си
Можно ли сделать регионы в Си как в C#?

Регионы
В Я есть такая вещь как поиск в определнном регионе Вот хотелось бы узнать по каким критериям туда попасть? Мой сайт находится...

10
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
07.07.2016, 20:09
Цитата Сообщение от ntlinuxnt Посмотреть сообщение
Я уже не знаю что делать, может кто подскажет, может у кого такое было, после регистрации дублируется регион и вроде все нормально, ребят помогите, подскажите, что я делаю не так.
Можно пояснить, что дублируется? Имеешь ввиду, что в бд записи идентичные вносятся?

Ps: имхо, нафига этот Mapper нужен если ручками через LINQ то же самое можно сделать, разве что здесь даже больше писанины. + лишнюю dll подгружать.
1
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
07.07.2016, 20:13  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Можно пояснить, что дублируется? Имеешь ввиду, что в бд записи идентичные вносятся?
Вот я регистрируюсь выбираю регион Москва(id=1) после регистрации в базе появляется еще один регион Москва, только с новым id. И у пользователя тоже записывается новый регион, а не тот который выбрал.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
07.07.2016, 20:24
Отношение Region -> ApplicationUser - один ко многим? У EF есть такой косяк, если ты, например, хочешь вставить новую дочернюю запись в таблицу, при этом в Navigation Property указываешь родительскую запись из памяти, то вставляется точно такая же родительская запись. Нужно, указывать только внешний ключ на род. запись, тогда все будет норм. Это раз.

Два - нужно повесить ограничение уникальности на свойство Name регионов по-хорошему. В метаданных вот как-то так:
C#
1
2
3
4
5
6
modelBuilder 
    .Entity<Region>() 
    .Property(t => t.Name) 
    .HasColumnAnnotation( 
        "Index",  
        new IndexAnnotation(new IndexAttribute("IX_Name") { IsUnique = true }));

Не по теме:

Ну я ведь знаю, что ты нифига не девушка, ну зачем так делать? :) Хитро*опый гик :D



Добавлено через 6 минут
Видимо, UserManager добавляет новые записи вот таким вот нежелательным образом.
0
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
07.07.2016, 20:27  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Отношение Region -> ApplicationUser - один ко многим?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Bind(Include = "Id,Name")]
    public class Region
    {
        #region Properties
 
        /// <summary>
        /// ID региона
        /// </summary>
        [Key]
        public int Id { get; set; }
 
        /// <summary>
        /// Наименование региона
        /// </summary>
        public string Name { get; set; }
 
        #endregion
    }
Модель Региона
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ApplicationUser : IdentityUser
    {
        public override string PhoneNumber { get; set; }
 
        public Region Region { get; set; }
 
        public DateTime EndPremiumDateTime { get; set; }
 
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Обратите внимание, что authenticationType должен совпадать с типом, определенным в CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Здесь добавьте утверждения пользователя
            userIdentity.AddClaim(new Claim("EndPremiumDateTime", this.EndPremiumDateTime.ToString()));
            return userIdentity;
        }
    }
Пользователь

Не по теме:


Цитата Сообщение от IamRain Посмотреть сообщение
Ну я ведь знаю, что ты нифига не девушка, ну зачем так делать? Хитро*опый гик
если загуглишь кто на фотке, ты вообще офигеешь:D

0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
07.07.2016, 20:30
Цитата Сообщение от ntlinuxnt Посмотреть сообщение
var result = this.UserManager.Create(user, vm.Password);
Я бы залез в исходники этого метода, проверил бы гипотезу.
Предварительно два решения:
1. Написать декоратор для UserManager-а. Делегировать дефолтному, все+- , кроме этого метода. Предпочтительный способ.
2. Через EF все втыкать.
+ надо пошукать, мб существующий функционал предлагает решение, чтоб лишнее не городить.
1
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
07.07.2016, 20:46  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Я бы залез в исходники этого метода, проверил бы гипотезу.
Тут прикол в том что туда не подлезешь.
Цитата Сообщение от IamRain Посмотреть сообщение
Написать декоратор для UserManager-а. Делегировать дефолтному, все+- , кроме этого метода. Предпочтительный способ.
Оно то хорошо но он по своему хеширует пароль вроде и т.д. Я в растерянности короче...

Добавлено через 3 минуты
Цитата Сообщение от IamRain Посмотреть сообщение
Два - нужно повесить ограничение уникальности на свойство Name регионов по-хорошему. В метаданных вот как-то так:
А это куда? И тогда наверное вообще не будет работать, как думаешь?
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
07.07.2016, 20:57
Неправильно собрал схему отношений, много пользователей может быть отнесено к одному региону, ты же их определил как 1-1. Поэтому при добавлении user-а добавляется запись в Region.
Можешь игнорить все, что я раньше написал, уже неактуально. Определи модели ApplicationUser -> Region как (m - 1). И будет профит.

Не по теме:

Не могу понять, как так,

Assigned sex refers to the assigning or naming of the sex of a baby, usually based upon the appearance of external genitalia.
, то есть репродуктивные функции она делает по-мужски?...тьфу, Хотя очень даже хороша



Добавлено через 5 минут
Вот так: one-to-many
1
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
07.07.2016, 21:22  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Неправильно собрал схему отношений, много пользователей может быть отнесено к одному региону, ты же их определил как 1-1. Поэтому при добавлении user-а добавляется запись в Region.
Ну как бы хотелось у 1 пользователя 1 регион, но не наоборот же...

Добавлено через 13 минут
Теперь делаю миграцию, а в нее ничего не записывается вроде правильно сделал..
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ApplicationUser : IdentityUser
    {
        public override string PhoneNumber { get; set; }
 
        public virtual Region Region { get; set; }
 
        public DateTime EndPremiumDateTime { get; set; }
 
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Обратите внимание, что authenticationType должен совпадать с типом, определенным в CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Здесь добавьте утверждения пользователя
            userIdentity.AddClaim(new Claim("EndPremiumDateTime", this.EndPremiumDateTime.ToString()));
            return userIdentity;
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Region
    {
        #region Properties
 
        public Region()
        {
            Users = new List<ApplicationUser>();
        }
        /// <summary>
        /// ID региона
        /// </summary>
        [Key]
        public int Id { get; set; }
 
        /// <summary>
        /// Наименование региона
        /// </summary>
        public string Name { get; set; }
 
        public virtual ICollection<ApplicationUser> Users { get; set; }
        #endregion
    }
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
07.07.2016, 21:30
Цитата Сообщение от ntlinuxnt Посмотреть сообщение
Тут прикол в том что туда не подлезешь.
А если найду?
Можешь просто сбросить сюда проект...
1
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
07.07.2016, 21:40  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
А если найду?
Не найдешь
Миниатюры
Дублируются регионы  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2016, 21:40
Помогаю со студенческими работами здесь

Уник и регионы
Такой вопрос, возможно и баян но заметил такую вещь. Открыл инет-магазин по автодевайсам у себя в городе - описания и формулировки...

регионы в поиске
если не достал еще своими вопросами:) в яндексе есть такая кнопочке &quot;найти в регионе....и регион пользователя&quot; вопрос - в...

разные регионы
У яндекса имеется региональная особенность, т.е. если сайт расчитан на какой-то конкретный город, например Москва, и он по какому-то...

Гугл идет в регионы
Вчера обнаружил что гугл уже как и яндекс подключается к региональным точкам обмена трафиком, что бы пользователям дешевле был трафик, да и...

Гео Мск/Регионы
Сайт есть в ЯК, регион указан - Москва. На сайте, в подвале прописан адрес и Москва и Moscow. Клиент тоже нужен исключительно московский. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru