我首先遇到有关实体框架数据库中一对一关系的问题。
我有两个表,一个用户表和一个用户详细信息表。
用户将包含登录信息,用户名,注册日期,userDetails将包含联系信息,网站等信息。 在我的数据库中,我的user.id引用了userdetails.userId。两者都是主键。
所以例如......
User:
Id [Primary Key (incremented)]
Password
Salt
RegisteredDate
UserDetails
UserId [Primary Key (References User.Id)]
Firstname
Contact
我的问题是我可以通过SQL Server添加记录,但EF会抛出异常。
如何在EF 6中成功创建一对一关系?
答案 0 :(得分:0)
您的UserDetails
应该是:
UserDetails
UserDetailId [Primary Key (incremented)]
UserId [Foreign Key (References User.Id)]
Firstname
Contact
您可以在UNIQUE INDEX
foreign key
CREATE UNIQUE NONCLUSTERED INDEX [IX_UserId] ON [dbo].[UserDetails]
(
[UserId] ASC
) ON [PRIMARY]
答案 1 :(得分:0)
尝试使用这样的模型:
public class User
{
public int Id { get; set; }
//...
//navigation property
public UserDetail UserDetail { get; set; }
}
public class UserDetail
{
[Key,ForeignKey("User")]
public int UserId { get; set; }
//...
//navigation property
public User User { get; set; }
}
这是使用Data Annotation。如果您想使用Fluent Api,可以通过以下方式覆盖上下文中的OnModelCreating
方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Configure UserId as PK for UserDetail
modelBuilder.Entity<UserDetail>()
.HasKey(e => e.UserId);
// Configure StudentId as FK for StudentAddress
modelBuilder.Entity<User>()
.HasOptional(u => u.UserDetail) // Mark UserDetail as optional for User
.WithRequired(ud=> ud.User); // Create inverse relationship
}
记得加密密码字段。