C# 实体框架';ComplexType.Field';属性不存在或未映射到类型';实体';
我在将值对象/复杂类型的属性映射到实体时遇到问题。我有一个用户实体,它有一个称为Credential的复杂类型属性,而Credential又有属性:Email、UserName、Password和SecurityStamp。我正在尝试将属性从复杂类型映射到实体,源代码如下所示:C# 实体框架';ComplexType.Field';属性不存在或未映射到类型';实体';,c#,entity-framework,orm,entity,complextype,C#,Entity Framework,Orm,Entity,Complextype,我在将值对象/复杂类型的属性映射到实体时遇到问题。我有一个用户实体,它有一个称为Credential的复杂类型属性,而Credential又有属性:Email、UserName、Password和SecurityStamp。我正在尝试将属性从复杂类型映射到实体,源代码如下所示: public class User { public string Id { get; protected set; } public Credential Credential { get; prote
public class User
{
public string Id { get; protected set; }
public Credential Credential { get; protected set; }
// unrelated properties and methods omitted for simplicity
}
public sealed class Credential: ValueObject<Credential>
{
public string Email { get; private set; }
public string UserName { get; private set; }
public string Password { get; private set; }
public string SecurityStamp { get; private set; }
public Credential() { }
public Credential(string email, string userName, string password, string securityStamp)
{
Email = email;
UserName = userName;
Password = password;
SecurityStamp = securityStamp;
}
public class CoreContext: DbContext
{
public IDbSet<User> Users { get; set; }
public CoreContext(string connectionString) : base(connectionString) {}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<CoreContext>(null);
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.Email).HasColumnName("Email");
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.UserName).HasColumnName("UserName");
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.Password).HasColumnName("Password");
modelBuilder.ComplexType<Credential>().Property(ucr => ucr.SecurityStamp).HasColumnName("SecurityStamp");
modelBuilder.Entity<User>().Property(u => u.Credential.Email).HasColumnName("Email");
modelBuilder.Entity<User>().Property(u => u.Credential.UserName).HasColumnName("UserName");
modelBuilder.Entity<User>().Property(u => u.Credential.Password).HasColumnName("Password");
modelBuilder.Entity<User>().Property(u => u.Credential.SecurityStamp).HasColumnName("SecurityStamp");
}
}
我不明白为什么会这样。我已经尽我所能配置了复杂类型映射,为什么它不起作用?有人知道我做错了什么吗 无法重现这一点: 添加迁移后,我得到了与您相同的设置:
public override void Up()
{
CreateTable(
"dbo.Users",
c => new
{
Id = c.String(nullable: false, maxLength: 128),
Email = c.String(),
UserName = c.String(),
Password = c.String(),
SecurityStamp = c.String()
})
.PrimaryKey(t => t.Id);
}
我唯一删除的是Credential:ValueObject上的基类,因为我没有它。一切看起来都很好,所以可能是该类出现了问题?无法重现: 添加迁移后,我得到了与您相同的设置:
public override void Up()
{
CreateTable(
"dbo.Users",
c => new
{
Id = c.String(nullable: false, maxLength: 128),
Email = c.String(),
UserName = c.String(),
Password = c.String(),
SecurityStamp = c.String()
})
.PrimaryKey(t => t.Id);
}
我唯一删除的是Credential:ValueObject上的基类,因为我没有它。一切看起来都很好,所以该类可能有问题?u.Credential是一个导航属性,您已经在前面的行中映射了它。删除最后4行,因为它们不是用户实体的属性。@DevilSuichiro:按照您所说的和之前的错误消息一样,它并不能解决问题。@lordygdrasill您解决过这个问题吗?u.Credential是一个导航属性,您已经在之前的行中映射了它。删除最后4行,因为它们不是用户实体的属性。@DevilSuichiro:正如您所说的和之前的错误消息一样,它没有解决问题。@LordyGdrasill您解决过这个问题吗?我认为类ValueObject没有任何问题,至少在映射方面没有问题。它只有几个方法,但没有属性/字段。我认为ValueObject类没有任何问题,至少在映射方面没有问题。它只有几个方法,但没有属性/字段。