Я думаю, что необходимо точно настроить отношения один к одному, используя Fluent API:
public class MyContext : DbContext
{
// ... your DbSets
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasRequired(u => u.user_profile)
.WithRequiredPrincipal();
}
}
А классы сущностей:
public class User
{
[Key]
public int user_id {get;set;}
public string username {get;set;}
public string email {get;set;}
public virtual User_Profile user_profile {get;set;}
}
public class User_Profile
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int user_id {get;set;}
public string firstname {get;set;}
public string lastname {get;set;}
}
Необходимо отключитьDatabaseGeneratedOption
от Identity
до None
в одном из классов.Я поменял принципала и зависимого, так как кажется, что User
должен быть принципалом.[ForeignKey(...)]
не является необходимым, потому что EF распознает user_id
в User_Profile
как свойство FK для User
.
Код, подобный этому ...
using (var context = new MyContext())
{
var user = new User();
var userProfile = new User_Profile();
user.user_profile = userProfile;
context.Users.Add(user);
context.SaveChanges();
}
.... должен работать тогда, как вы ожидаете, и сохранять оба связанных объекта в базе данных.