2016-10-06 123 views
0

我在將值對象/複雜類型的屬性映射到實體時遇到問題。我有一個用戶實體,它具有一個名爲Credential的複雜類型屬性,該屬性又具有屬性:Email,UserName,Password和SecurityStamp。我想從複雜類型的屬性映射到實體,源代碼如下所示:實體框架:「ComplexType.Field」屬性不存在或未映射到「實體」類型

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"); 
    } 
} 

正如你看到的,我試圖映射覆雜類型屬性的實體。我首先將Credential配置爲複雜類型,然後配置實體User的屬性。但是,我收到以下錯誤:

The 'Credential.Email' property does not exist or is not mapped for the type 'User'. 

我不明白爲什麼發生這種情況。我盡我所能配置複雜類型映射,爲什麼它不工作?任何人對我可能做錯了什麼都有想法?

+0

u.Credential是導航屬性,您已將其映射到之前的行中。刪除最後4行,因爲這些是用戶實體的NO屬性。 – DevilSuichiro

+0

@DevilSuichiro:如你所說,和以前一樣的錯誤信息,它不能解決問題。 –

+0

@LordYggdrasill你曾經解決過這個問題嗎? – rleffler

回答

0

未能重現此:

我有了這個之後添加遷移使用相同的設置,您有:

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,因爲我沒有它。一切看起來不錯,所以也許這個班有什麼問題?

+0

我不認爲類的ValueObject有什麼問題,至少在映射方面沒有問題。它只有幾個方法,但沒有屬性/字段。 –

相關問題