Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787

Непонятный столбец в базе при использовании EF

28.05.2019, 16:19. Показов 1491. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Изучаю Entity Framework. Для теста создал приложение Склад.
Создал модель Заказа:
C#
1
2
3
4
5
6
7
    public class Order
    {
        public int OrderId { get; set; }
        public int Count { get; set; }
        public int CustomerId { get; set; }
        public virtual Customer Customer { get; set; }
    }
Модель заказчика:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public class Customer
    {
        public int CustomerId { get; set; }
        public string Name { get; set; }
        public string Adress { get; set; }
        public virtual ICollection<Customer> Customers { get; set; }
        public Customer()
        {
            Customers = new List<Customer>();
        }
        public override string ToString()
        {
            return Name;
        }
    }
Контекст:
C#
1
2
3
4
5
6
 class StorageContext:DbContext
    {
        public StorageContext() : base("DefaultConnection") { }
        public DbSet<Order> Orders { get; set; }
        public DbSet<Customer> Customers { get; set; }
    }
Код главной формы:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
   public partial class formStorage : Form
    {
        StorageContext db;
        public formStorage()
        {
            InitializeComponent();
 
            db = new StorageContext();
            db.Orders.Load();
            dgvStorage.DataSource = db.Orders.Local.ToBindingList();
            dgvStorage.Columns["OrderId"].Visible = false;
            dgvStorage.Columns["CustomerId"].Visible = false;
            dgvStorage.Columns["Count"].HeaderText = "Количество";
            dgvStorage.Columns["Customer"].HeaderText = "Заказчик";
 
        }
 
        private void btnAddCustomer_Click(object sender, EventArgs e)
        {
            formCustomer fCustomer = new formCustomer();
            DialogResult result = fCustomer.ShowDialog(this);
            if (result == DialogResult.Cancel)
            {
                return;
            }
            Customer customer = new Customer();
            customer.Name = fCustomer.tbName.Text;
            customer.Adress = fCustomer.tbAdress.Text;
            db.Customers.Add(customer);
            db.SaveChanges();
        }
 
        private void btnAdd_Click(object sender, EventArgs e)
        {
            formOrder fOrder = new formOrder();
 
            List<Customer> customers = db.Customers.ToList();
            fOrder.cbCustomer.DataSource = customers;
            fOrder.cbCustomer.ValueMember = "CustomerId";
            fOrder.cbCustomer.DisplayMember = "Name";
 
            DialogResult result = fOrder.ShowDialog(this);
            if (result == DialogResult.Cancel)
            {
                return;
            }
            Order order = new Order();
            order.Count = int.Parse(fOrder.tbCount.Text);
            order.CustomerId = int.Parse(fOrder.cbCustomer.SelectedValue.ToString());
            db.Orders.Add(order);
            db.SaveChanges();
        }
    }
В результате работы программы EF создает непонятный столбец:


Проект:
Storage.rar
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2019, 16:19
Ответы с готовыми решениями:

При использовании шифра Плейфейера на базе русского языка из алфавита удаляются буквы Ё
При использовании шифра Плейфейера на базе русского языка из алфавита удаляются буквы Ё (заменяется буквой Е) и буква Й (заменяется буквой...

При использовании MySQLdb возможно ли задать путь к базе данных, и если да, то каким образом?
При использовании MySQLdb на Python возможно ли задать путь к базе данных, и если да, то каким образом?

Не заполняется столбец в базе
написал форум маленький. вот БД код $dn2 = mysql_query('select t.uid2, t.authorid, t.message, t.timestamp, u.acct_username as author,...

15
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
28.05.2019, 16:50
Уберите свойство public int CustomerId { get; set; } из Order. У вас уже есть сущность Customer там
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
28.05.2019, 16:59  [ТС]
Toros1992, Но туда я записываю ID заказчика, и строка подсвечивается красным
C#
1
order.CustomerId = int.Parse(fOrder.cbCustomer.SelectedValue.ToString());
Куда и как мне сохранить id Заказчика?
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
28.05.2019, 17:02
MaksimkaI, а у вас точно в классе Customer должна находиться коллекция Customer? Может должны быть Orders?
C#
1
public virtual ICollection<Customer> Customers { get; set; }
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
28.05.2019, 17:05  [ТС]
Cupko, Я точно и не отвечу делаю по примеру с метанита. Там написано, что в обоих классах должны быть эти виртуальные коллекции.https://metanit.com/sharp/entityframework/3.3.php
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
28.05.2019, 17:06
Вы не id туда записывайте, а сам объект customer
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
28.05.2019, 17:11
Лучший ответ Сообщение было отмечено MaksimkaI как решение

Решение

MaksimkaI, вы внимательно посмотрите. Там в Team коллекция Players, а у Player ссылка на Team.
А у вас у Order ссылка на Customer, а у Customer вместо коллекции Orders - коллекция Customers. Т.е. заказчик содержит коллекцию заказчиков.
1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
28.05.2019, 17:25  [ТС]
Cupko, Все вроде нормализовалось. Ох уж эта невнимательность. Спасибо!

Добавлено через 4 минуты
Cupko, Еще такой вопрос, мб знаете, почему при Update записи данные сразу не меняются? То есть если тыкну в DGV, только потом меняется.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
28.05.2019, 17:32
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Cupko, Еще такой вопрос, мб знаете, почему при Update записи данные сразу не меняются? То есть если тыкну в DGV, только потом меняется.
К сожалению нет. Этот вопрос скорее относится к DGV и WinForms, и я вряд ли смогу помочь с этим.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
28.05.2019, 17:34
MaksimkaI,
C#
1
dataGridView1.Refresh();
1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
28.05.2019, 17:39  [ТС]
AndreyVorobey, помогло, Спасибо.

Добавлено через 2 минуты
А вот то что такое загромождение идет это нормально?
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
   public partial class formStorage : Form
    {
        StorageContext db;
        public formStorage()
        {
            InitializeComponent();
 
            db = new StorageContext();
            db.Orders.Load();
            dgvStorage.DataSource = db.Orders.Local.ToBindingList();
            dgvStorage.Columns["OrderId"].Visible = false;
            dgvStorage.Columns["Nomenclature"].HeaderText = "Наименование товара";
            dgvStorage.Columns["Count"].HeaderText = "Количество";
            dgvStorage.Columns["CustomerId"].Visible = false;
            dgvStorage.Columns["Customer"].HeaderText = "Заказчик";
 
        }
 
        private void btnAddCustomer_Click(object sender, EventArgs e)
        {
            formCustomer fCustomer = new formCustomer();
            DialogResult result = fCustomer.ShowDialog(this);
            if (result == DialogResult.Cancel)
            {
                return;
            }
            Customer customer = new Customer();
            customer.Name = fCustomer.tbName.Text;
            customer.Adress = fCustomer.tbAdress.Text;
            db.Customers.Add(customer);
            db.SaveChanges();
        }
 
        private void btnAdd_Click(object sender, EventArgs e)
        {
            formOrder fOrder = new formOrder();
 
            List<Customer> customers = db.Customers.ToList();
            fOrder.cbCustomer.DataSource = customers;
            fOrder.cbCustomer.ValueMember = "CustomerId";
            fOrder.cbCustomer.DisplayMember = "Name";
 
            DialogResult result = fOrder.ShowDialog(this);
            if (result == DialogResult.Cancel)
            {
                return;
            }
            Order order = new Order();
            order.Nomenclature = fOrder.tbNomenclature.Text;
            order.Count = int.Parse(fOrder.tbCount.Text);
            order.CustomerId = int.Parse(fOrder.cbCustomer.SelectedValue.ToString());
            db.Orders.Add(order);
            db.SaveChanges();
        }
 
        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (dgvStorage.SelectedRows.Count < 1)
                return;
 
            int index = dgvStorage.SelectedRows[0].Index;
            int id = 0;
            bool converted = int.TryParse(dgvStorage[0, index].Value.ToString(), out id);
            if (converted == false)
            {
                return;
            }
            
            Order order = db.Orders.Find(id);
            formOrder fOrder = new formOrder();
            fOrder.tbNomenclature.Text = order.Nomenclature;
            fOrder.tbCount.Text = order.Count.ToString();
            List<Customer> customers = db.Customers.ToList();
            fOrder.cbCustomer.DataSource = customers;
            fOrder.cbCustomer.ValueMember = "CustomerId";
            fOrder.cbCustomer.DisplayMember = "Name";
 
            DialogResult result = fOrder.ShowDialog(this);
            if (result == DialogResult.Cancel)
            {
                return;
            }
            order.Nomenclature = fOrder.tbNomenclature.Text;
            order.Count = int.Parse(fOrder.tbCount.Text);
            order.CustomerId = int.Parse(fOrder.cbCustomer.SelectedValue.ToString());
 
            db.Entry(order).State = EntityState.Modified;
            db.SaveChanges();
            dgvStorage.Refresh();
Добавлено через 54 секунды
Правильно ли с точки зрения ООП вот такой код?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
28.05.2019, 18:13
Цитата Сообщение от MaksimkaI Посмотреть сообщение
Правильно ли с точки зрения ООП вот такой код?
Ответы на 7 самых частых вопросов по WinForms
0
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
28.05.2019, 19:10  [ТС]
Igr_ok, Вы этой ссылкой только усложнили мне жизнь.Вопрос был правильно или нет и все. Те у кого мало опыта в программировании, обучаются по разным источникам. В данном случаю я делал по сайту метанита, и мне хотелось бы узнать правильно ли использован мой подход.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
28.05.2019, 19:13
Цитата Сообщение от MaksimkaI Посмотреть сообщение
мне хотелось бы узнать правильно ли использован мой подход.
Нет не правильно. Повсюду прямой доступ к контролам, код UI смешан с бизнес логикой и т.д.
1
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
28.05.2019, 21:28
MaksimkaI, если вам сложно прочитать, я могу процитировать. В ответе на вопрос "Как передать данные из одной формы в другую" ваш подход оценивается как "- Противоречит всем основам ООП". Я ответил на ваш вопрос?
Цитата Сообщение от MaksimkaI Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
int index = dgvStorage.SelectedRows[0].Index;
int id = 0;
bool converted = int.TryParse(dgvStorage[0, index].Value.ToString(), out id);
if (converted == false)
{
return;
}
Order order = db.Orders.Find(id);
Это можно сделать одной строкой кода
C#
1
var currentObject = (MyClass)dataGridView1.CurrentRow.DataBoundItem;
1
130 / 68 / 31
Регистрация: 24.07.2018
Сообщений: 787
29.05.2019, 07:41  [ТС]
Igr_ok,
Цитата Сообщение от Igr_ok Посмотреть сообщение
var currentObject = (MyClass)dataGridView1.CurrentRow.DataBo undItem;
использовал, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2019, 07:41
Помогаю со студенческими работами здесь

Добавить столбец ко всем таблицам в базе данных
Здравствуйте! Как добавить столбец ко всем таблицам в базе? Таблиц очень много , больше 1000, делать в ручную оч долго... СпасибО!

Как обновить весь столбец status в базе через php
Вот код вывода базы на страницу. Как обновить столбец статут, подскажите, пожалуйста, буду благодарен! &lt;form&gt; &lt;?php ...

Непонятный глюк при дебаге
Курсор стоял на 200-й строке, я добавил Buffer в Watch и сразу вылезло окно call stack.

Непонятный баг при запросе
Подскажите, это баг или что? Выводит 77тыс, а показывает 70тыс

При включении непонятный звук
мужики подскажите,когда включаю комп при загрузке производит звук какой то,что это?я тут новичок у вас если что не так извеняюсь....


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru