我试图做一个一比一的关系,与导航属性只是在一边(MVC4,EF5,代码首先)。
public class User {
public int UserId { get; set; } //PK
public int RankId { get; set; } //FK
public virtual Rank { get; set; } //Navigation
}
public class Rank {
public int RankId { get; set; }
}
组态:
public class RankConfiguration : EntityTypeConfiguration<Rank>
{
public RankConfiguration()
{
HasKey(e => e.RankId);
Property(e => e.RankId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
}
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration ()
{
// PK
HasKey(e => e.UserId);
Property(e => e.RankId)
.IsRequired();
HasRequired(e => e.Rank)
.WithRequiredDependent()
.WillCascadeOnDelete(true);
}
}
对于我所看到的(和我知道的很少),DB是正确生成,但我得到这个错误:
在一个ReferentialConstraint从属属性被映射到一个存储生成的列。 列:“用户ID”。
在第一次尝试,我想创建一个连接表(参见这里EF5流利的API一到一个没有导航 ),不知道是否是个好主意,但我无法用流利的API来完成。
我不知道为什么,什么是错..任何帮助吗? 提前谢谢了
UPDATE
第一次尝试后@soadyp评论,我想配置一到一个与连接表
HasRequired(e => e.Rank)
.WithRequiredDependent()
.Map(m =>
{
m.ToTable("UserRank");
m.MapKey("RankId");
})
.WillCascadeOnDelete(true);
但是当我尝试迁移我得到这个错误:
The specified table 'UserRank' was not found in the model.
Ensure that the table name has been correctly specified.
第二次尝试也许我做一个简单的工作太复杂了,看完这个http://weblogs.asp.net/manavi/archive/2011/04/14/associations-in-ef-4-1-code-first-部分-3-共享主密钥-associations.aspx我只是以这种方式改变
HasRequired(e => e.Rank)
.WithOptional()
.WillCascadeOnDelete(true);
一切都很好,但(当我插入一排明显problmes)的用户标识PK没有设置好的作为标识。 如果我将它指定为身份:
Property(e => e.UserId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
我得到以下错误:
Cascading foreign key 'FK_dbo.Users_dbo.Ranks_UserId' cannot be created where
the referencing column 'Users.UserID' is an identity column.
Could not create constraint. See previous errors.