与外键冲突
保存对象对时出现错误。
代码
数据类
public class User
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public bool IsApproved { get; set; }
public bool IsBlock { get; set; }
public bool IsGuest { get; set; }
public string CodeGuest { get; set; }
public Gender Gender { get; set; }
public DateTime? Birth { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public virtual Couple Couple { get; set; }
public User()
{
Id = Guid.NewGuid();
}
}
public class Couple
{
public Guid Id { get; private set; }
public string UrlKeyword { get; set; }
public virtual User Groom { get; set; }
public virtual User Bride { get; set; }
public DateTime? Marriage { get; set; }
public DateTime? Dating { get; set; }
public DateTime? Engagement { get; set; }
public virtual ICollection<User> Users { get; set; }
public Couple()
{
Id = Guid.NewGuid();
}
}
上下文和配置
public class DataContext : DbContext
{
#region Collections
public DbSet<Role> Roles { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Couple> Couples { get; set; }
#endregion
public DataContext()
{
Database.SetInitializer(new AndMarriedInitializer());
if (!Database.CreateIfNotExists())
Database.CreateIfNotExists();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserConfiguration());
base.OnModelCreating(modelBuilder);
}
}
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
HasKey(p => p.Id).
Property(p => p.Id)
.IsRequired();
Property(p => p.FirstName)
.HasMaxLength(60)
.IsRequired();
Property(p => p.LastName)
.HasMaxLength(120)
.IsRequired();
Property(p => p.Email)
.HasMaxLength(120)
.IsRequired();
Property(p => p.Password)
.HasMaxLength(60);
Property(p => p.CodeGuest)
.HasMaxLength(60);
HasRequired(u => u.Couple).WithRequiredPrincipal();
}
}
public class CoupleConfiguration : EntityTypeConfiguration<Couple>
{
public CoupleConfiguration()
{
HasKey(p => p.Id)
.Property(p => p.Id)
.IsRequired();
Property(p => p.UrlKeyword)
.IsRequired()
.HasMaxLength(25);
HasRequired(p => p.Groom).WithRequiredPrincipal().WillCascadeOnDelete();
HasRequired(p => p.Bride).WithRequiredPrincipal().WillCascadeOnDelete();
}
}
public class AndMarriedInitializer : DropCreateDatabaseIfModelChanges<DataContext>
{
protected override void Seed(DataContext context)
{
context.Roles.Add(new Role
{
Name = Constants.RoleAdmin
});
context.Roles.Add(new Role
{
Name = Constants.RoleCouple
});
context.Roles.Add(new Role
{
Name = Constants.RoleGuest
});
context.SaveChanges();
base.Seed(context);
}
}
问题
不知道配置是否正确,但是我们与Couple with User的关系是:1对1。
不太明白WithRequiredPrincipal
和 WithRequiredDependent
错误
On SaveChanges() =>
INSERT 语句与 FOREIGN KEY 约束“User_Couple”冲突。冲突发生在数据库“andmarried”、表“dbo.Users”、列“Id”中。 该声明已终止。
The error occurs when saving the object couple.
Code
Data class
public class User
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public bool IsApproved { get; set; }
public bool IsBlock { get; set; }
public bool IsGuest { get; set; }
public string CodeGuest { get; set; }
public Gender Gender { get; set; }
public DateTime? Birth { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public virtual Couple Couple { get; set; }
public User()
{
Id = Guid.NewGuid();
}
}
public class Couple
{
public Guid Id { get; private set; }
public string UrlKeyword { get; set; }
public virtual User Groom { get; set; }
public virtual User Bride { get; set; }
public DateTime? Marriage { get; set; }
public DateTime? Dating { get; set; }
public DateTime? Engagement { get; set; }
public virtual ICollection<User> Users { get; set; }
public Couple()
{
Id = Guid.NewGuid();
}
}
Context and configurations
public class DataContext : DbContext
{
#region Collections
public DbSet<Role> Roles { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Couple> Couples { get; set; }
#endregion
public DataContext()
{
Database.SetInitializer(new AndMarriedInitializer());
if (!Database.CreateIfNotExists())
Database.CreateIfNotExists();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserConfiguration());
base.OnModelCreating(modelBuilder);
}
}
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
HasKey(p => p.Id).
Property(p => p.Id)
.IsRequired();
Property(p => p.FirstName)
.HasMaxLength(60)
.IsRequired();
Property(p => p.LastName)
.HasMaxLength(120)
.IsRequired();
Property(p => p.Email)
.HasMaxLength(120)
.IsRequired();
Property(p => p.Password)
.HasMaxLength(60);
Property(p => p.CodeGuest)
.HasMaxLength(60);
HasRequired(u => u.Couple).WithRequiredPrincipal();
}
}
public class CoupleConfiguration : EntityTypeConfiguration<Couple>
{
public CoupleConfiguration()
{
HasKey(p => p.Id)
.Property(p => p.Id)
.IsRequired();
Property(p => p.UrlKeyword)
.IsRequired()
.HasMaxLength(25);
HasRequired(p => p.Groom).WithRequiredPrincipal().WillCascadeOnDelete();
HasRequired(p => p.Bride).WithRequiredPrincipal().WillCascadeOnDelete();
}
}
public class AndMarriedInitializer : DropCreateDatabaseIfModelChanges<DataContext>
{
protected override void Seed(DataContext context)
{
context.Roles.Add(new Role
{
Name = Constants.RoleAdmin
});
context.Roles.Add(new Role
{
Name = Constants.RoleCouple
});
context.Roles.Add(new Role
{
Name = Constants.RoleGuest
});
context.SaveChanges();
base.Seed(context);
}
}
Question
Do not know if configured correctly, but we relate to the Couple with User is: 1 to 1.
Do not quite understand how the WithRequiredPrincipal
and WithRequiredDependent
Error
On SaveChanges() =>
The INSERT statement conflicted with the FOREIGN KEY constraint "User_Couple". The conflict occurred in database "andmarried", table "dbo.Users", column 'Id'.
The statement has been terminated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用这行代码:
您要求所有用户始终“耦合”。
那么,当您提交更改时,您创建的所有用户都已结婚吗?如果不是,请删除该外键约束。 (只要把那几个留在里面就应该没问题了)
With this line of code:
You're requiring all users to be "coupled" all the time.
So, when you commit your changes, are all the users you created married? If not, remove that foreign key constraint. (Just leave the couple ones in and you should be O.K.)