powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / EF CodeFirst. Исключение. При Add.SaveChanges
12 сообщений из 12, страница 1 из 1
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336015
E5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
E5
Гость
Доброе время суток, помогите разобраться пожалуйста, что я делаю не так.
Есть две связные таблицы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Users
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string TwoName { get; set; }
        public string LastName { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public string Telephone { get; set; }
        public string Position { get; set; }
        public int Group { get; set; }
        public int OvdId { get; set; }
        public virtual Ovd Ovd { get; set; }
    }

и
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    
public class Ovd
    {
        public int Id { get; set; }
        public string OvdName { get; set; }

        public virtual ICollection<Users> Ovdd { get; set; }

        public Ovd()
        {
            Ovdd = new List<Users>();
        }
        public override string ToString()
        {
            return OvdName;
        }
    }


И код формы: [SRC C#]Users usrs = new Users();
usrs.Name = AddF.usrname.Text;
usrs.TwoName = AddF.twoname.Text;
usrs.LastName = AddF.Lastname.Text;
usrs.Login = AddF.login.Text.Trim();
usrs.Password = Password.Coding(AddF.password.Text.Trim());
usrs.Telephone = AddF.telephone.Text.Trim();
usrs.Position = AddF.position.Text;
usrs.Group = (Int32)AddF.groupbox.SelectedIndex;

usrs.Ovd = (Ovd)AddF.OvdBox.SelectedItem;
//usrs.OvdId = (Int32)AddF.OvdBox.SelectedValue;
db.Users.Add(usrs);
try
{
//db.Users.Add(usrs);
db.SaveChanges();
MessageBox.Show("Регистрация успешна");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336020
E5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
E5
Гость
Забыл уточнить, что исключение происходит только при пустой таблице. То есть, если в таблице присутствуют записи, все проходит успешно.
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336160
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E5usrs.Ovd = (Ovd)AddF.OvdBox.SelectedItem;

здесь должно быть типа такого:

Код: c#
1.
usrs.Ovd = db.Ovds.Find(AddF.OvdBox.SelectedItem);



Нельзя напрямую присваивать Id-шники. надо присваивать объекты.
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336184
E5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
E5
Гость
hVostt, теперь говорит, о том, что указан неверный параметр. Поддерживаются только скалярные типы.

Вся загвоздка в том, что напрямую, вроде бы ID и не присваивается. И если это не первая запись, то все регистрируется, как и должно быть.
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336196
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E5,

что у тебя хранится в AddF.OvdBox.SelectedItem ?
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336204
E5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
E5
Гость
hVostt, прошу прощения, сразу не указал
Код: c#
1.
2.
3.
4.
5.
List<Ovd> ovds = db.Ovds.ToList();
            // Список отделов
            AddF.OvdBox.DataSource = ovds;
            AddF.OvdBox.ValueMember = "OvdId";
            AddF.OvdBox.DisplayMember = "OvdName";



первая таблица
id name OvdId ... ...1 Вася Второй (2) ... ...2 Петя Первый (1)......

Это вторая таблица, она уже заполнена

id name1 первый2 второй
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336226
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E5,

тебе надо из текущего выбранного элемента в AddF.OvdBox получить OvdId, привести его к числу (что там у тебя int или long), и найти объект в контексте также, как я указал, только нужен OvdId:

Код: c#
1.
2.
var ovdId = Convert.ToInt32(AddF.OvdBox.SelectedItem);
usrs.Ovd = db.Ovds.Find(ovdId);



Это примерный код.
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336228
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E5,

Ещё посмотри внутрь InvalidOperationException на предмет вложенного исключения. Там больше полезной информации об ошибке.
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336244
E5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
E5
Гость
hVostt, спасибо большое. Я вектор Ваших мыслей понимаю, но...
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39336496
E5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
E5
Гость
Решение оказалось самым "необычным" для Microsoft. Пересоздал проект
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39338828
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНельзя напрямую присваивать Id-шники. надо присваивать объекты.

И давно?
...
Рейтинг: 0 / 0
EF CodeFirst. Исключение. При Add.SaveChanges
    #39339552
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiquehVosttНельзя напрямую присваивать Id-шники. надо присваивать объекты.

И давно?

some.Nav.Id = 5

нельзя.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / EF CodeFirst. Исключение. При Add.SaveChanges
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]