powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Связь Один к Одному Entity Framework 6
10 сообщений из 10, страница 1 из 1
Связь Один к Одному Entity Framework 6
    #39952859
FerrariF70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Работаю через Entity Framework 6
не пойму в чём беда пытался разными путями сделать связь один к одному но постоянно выбрасывается исключение
System.FormatException: "Входная строка имела неверный формат.". СУБД MySql.
Заранее спасибо!

Код: 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.
[DbConfigurationType(typeof(MySqlEFConfiguration))]
    public class UserContext : DbContext
    {
        public UserContext() : base() { }
        public UserContext(DbConnection existingConnection, bool ContextOwnsConnection) : base(existingConnection, ContextOwnsConnection) { }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ConfigurationUserRelation());
            modelBuilder.Configurations.Add(new ConfigurationUserProfileRelation());
 
            base.OnModelCreating(modelBuilder);
        }
        public DbSet<UserProfile> Users { get; set; }
    }
 
    public class ConfigurationUserProfileRelation : EntityTypeConfiguration<UserProfile>
    {
        public ConfigurationUserProfileRelation()
        {
            ToTable("UserProfile").HasKey(x => x.Id);
            HasRequired(x => x.User).WithRequiredPrincipal(x => x.Profile);
        }
    }
    public class ConfigurationUserRelation: EntityTypeConfiguration<User>
    {
        public ConfigurationUserRelation()
        {
            ToTable("User").HasKey(x => x.Id);
        }
    }



Код: 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.
 public class User
    {
        public int Id { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public UserProfile Profile { get; set; }
    }
 
 public class UserProfile
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public User User { get; set; }
    }
 
 static void Main(string[] args)
        {
            string connectionString = "server=localhost; port=3306; database=TestProject; uid=root; password=*******";
 
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                using (UserContext context = new UserContext(connection, false))
                {
                    context.Database.CreateIfNotExists();//тут выбрасывается исключение
                }
                connection.Open();
                MySqlTransaction transaction = connection.BeginTransaction();
                try
                {
                    using (UserContext context = new UserContext(connection, false))
                    {
                        context.Database.UseTransaction(transaction);
                        List<UserProfile> users = new List<UserProfile>
                        {
                            new UserProfile{ Name = "Jhon" , LastName = "Walker"},
                            new UserProfile{Name = "Jack" , LastName = "Denials"},
                            new UserProfile{Name ="Viktor", LastName = "Blud"}
                        };
                        context.Users.AddRange(users);
                        context.SaveChanges();
                    }
                    transaction.Commit();
 
                }
                catch
                {
                    transaction.Rollback(); throw;
                }
            }
        }
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953008
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
public DbSet<UserProfile> Users { get; set; }



Где Профайл?

Хотя дело не в этом.
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953017
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
          HasOptional(x => x.Profile).WithRequiredPrincipal(x => x.User);



В вашем случае вот так. User главная таблица, поэтому WithRequiredPrincipal. Второстепенная таблица Profile может быть HasRequired, но в вашем случае HasOptional. Потому как вы добавляете только User без Profile.
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953022
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FerrariF70

List<UserProfile> users = new List<UserProfile>
{
new UserProfile{ Name = "Jhon" , LastName = "Walker"},
new UserProfile{Name = "Jack" , LastName = "Denials"},
new UserProfile{Name ="Viktor", LastName = "Blud"}
};
context.Users.AddRange(users);
[/src]


я подзапутался в ваших названиях но все равно проблема здесь HasRequired(x => x.User).WithRequiredPrincipal(x => x.Profile);

вы добавляете только профайл без пользователя, а в конфигурации он Requered.
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953044
FerrariF70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HasOptional(x => x.Profile).WithRequiredPrincipal(x => x.User); таким образом не возможно сделать как вы показываете если ввашем случае HasOptional то далее расширение должно идти в соответствии WithOptionalDependent или WithOptionalPrincipal.
у меня таблица User главная а UserProfile дочерняя. Я пробовал с аннотациями такой же геморой.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 public class User
    {
        [Key]
        public int Id { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public UserProfile Profile { get; set; }
    }

 public class UserProfile
    {
       [Key]
       [ForeignKey("User")]
        public int Id { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public User User { get; set; }
    }



Я знаю что не добавил пользователя дело в том что он даже до туда не доходит до добавления в список пользователей. Исключение происходит на более раннем этапе
Код: c#
1.
2.
3.
4.
using (UserContext context = new UserContext(connection, false))
{
   context.Database.CreateIfNotExists();//тут выбрасывается исключение
}
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953052
FerrariF70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оставьте мой пример и возьмите вот пример из Метанита "Связь один-к-одному" я точно так же всё делаю такое же исключение выбрасывает. если нужно конфигурационный файл я выставлю.
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953143
svpk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем отдельный MySqlConnection, чего-то не хватает в UserContext?

А
Код: c#
1.
connection.Open();

не надо делать до
Код: c#
1.
new UserContext(connection, false)

?
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953147
FerrariF70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svpk,
я делал так как на офф сайте MySql писали насчёт MySqlConnection. Да вы были правы я сделал таким способом работает!
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 static void Main(string[] args)
        {
            using (UserContext context = new UserContext())
            {
                context.Database.Log = (string message) => { Console.WriteLine(message); };
                var user1 = new User { Login = "user1", Password = "123456" };
                var user2 = new User { Login = "user2", Password = "123456" };
                var user3 = new User { Login = "user3", Password = "123456" };
                List<UserProfile> users = new List<UserProfile>
                        {
                            new UserProfile{ Name = "Jhon" , LastName = "Walker",Id=user1.Id },
                            new UserProfile{Name = "Jack" , LastName = "Denials",Id=user2.Id },
                            new UserProfile { Name = "Viktor", LastName = "Blud", Id = user3.Id}
                        };
                context.Users.AddRange(users);
                context.SaveChanges();
            }
        }


Но всё равно не работает когда я хочу связать таблицы исключение вы летает вот на этой строке
Код: c#
1.
 context.Users.AddRange(users);

всё тоже входная строка имела не верный формат
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953206
svpk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужен еще DbSet<User>, куда перед добавлением профилей надо добавить user1, user2, user3.
И либо делать SaveChanges перед добавление профиля, чтобы у них уже появились Id, либо в профиле назначать юзера не по Id (Id=user1.Id), а по ссылке (User=user1).
...
Рейтинг: 0 / 0
Связь Один к Одному Entity Framework 6
    #39953351
FerrariF70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
static void Main(string[] args)
        {
            using (UserContext context = new UserContext())
            {
                context.Database.Log = (string message) => { Console.WriteLine(message); };
                var user1 = new User { Login = "user1", Password = "123456" };
                var user2 = new User { Login = "user2", Password = "123456" };
                var user3 = new User { Login = "user3", Password = "123456" };


                List<UserProfile> users = new List<UserProfile>
                { 
                    new UserProfile{ Name = "Jhon" , LastName = "Walker", User = user1 },
                    new UserProfile{Name = "Jack" , LastName = "Denials", User = user2},
                    new UserProfile { Name = "Viktor", LastName = "Blud", User = user3}
                };
                context.Users.AddRange(new List<User> { user1, user2, user3 });
                context.UsersProfile.AddRange(users);

                context.SaveChanges();
            }

        }


делал по разному но ничего не изменилось как только он обращается к этому коду
Код: c#
1.
 modelBuilder.Entity<UserProfile>().HasRequired(p => p.User).WithRequiredPrincipal(c => c.Profile);


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


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