2012-05-24 51 views
0

EF符号相反第一个工具是生成复合键EF Reverse Code First Tool为什么会生成复合键?

public vw_ResourcesMap() 
    { 
     // Primary Key 
     this.HasKey(t => new { t.Refno, t.Obsolete }); // Why??? 

     // Properties 
     this.Property(t => t.Refno) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

     this.Property(t => t.Name) 
      .HasMaxLength(50); 

     this.Property(t => t.LocnID) 
      .IsFixedLength() 
      .HasMaxLength(2); 

     this.Property(t => t.Created_by) 
      .HasMaxLength(50); 

     // Table & Column Mappings 
     this.ToTable("vw_Resources"); 
     this.Property(t => t.Refno).HasColumnName("Refno"); 
     this.Property(t => t.Name).HasColumnName("Name"); 
     this.Property(t => t.Head).HasColumnName("Head"); 
     this.Property(t => t.LocnID).HasColumnName("LocnID"); 
     this.Property(t => t.Obsolete).HasColumnName("Obsolete"); 
     this.Property(t => t.Created_by).HasColumnName("Created_by"); 
     this.Property(t => t.Version).HasColumnName("Version"); 
     this.Property(t => t.Rank).HasColumnName("Rank"); 
    } 
} 

我不得不把主键声明更改为this.HasKey(t => t.Refno)映射关系,否则我会得到下面的异常。

关系约束中的从属角色和主角色中的属性数量必须相同。

也许这是一个错误 - IDK

所有的工作,但希望增加了解和认识。

谢谢!

+0

它是数据库视图的逆向工程映射吗?其他列可以为空吗? –

+0

我有类似的问题,因为我不断改变数据库,并在更改后使用反向工程来正确地映射数据库,所以有一次我忘记更改数据库,并导致与您的错误相同。问题是我从一列删除IDENTITY,并添加到另一个不应该是IDENTITY。 –

+0

@LadislavMrnka是的,它映射这是该工具的更新。列是可空的。主要特别需要非空来满足关系(如果我没有记错的话)。 – Rich

回答

0

数据库视图没有主键,因此EF尝试使用所有不使用二进制数据类型的非空值列来推断该键。

+0

对我有意义。谢谢! BTY - 我非常感谢你在SO和你的博客上的所有工作 - 非常有帮助! – Rich