2016-03-23 14 views
0

İki nesne arasında bir ilişki atama üzerinde çalışıyorum, ancak eşleme üzerinde bir hata alıyorum. Tek bir ilişki Varlık Çerçeve yabancı anahtar eşleme

Ben şu nesneler:

public abstract class EntityBase : IEntity 
{ 
    public int Id { get; set; } 
} 

public class ManagerUser : EntityBase 
{ 
    public string UserCode { get; set; } 
    public string Title { get; set; } 
    public virtual Staff StaffDetails { get; set; } 
} 

public class Staff : EntityBase 
{ 
    public string UserCode { get; set; } 
    public string DOB { get; set; } 
} 

public class ManagerUserMap : EntityMapBase<ManagerUser> 
{ 
    protected override void SetupMappings() 
    { 
     base.SetupMappings(); 
     //this.HasKey(t => t.UserCode); 
     this.ToTable("ManagerUsers"); 
     this.Property(t => t.Id).HasColumnName("ManagerUsersID") 
     .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); 
     this.Property(t => t.Title).HasColumnName("txtTitle"); 
     this.HasRequired(x => x.StaffDetails) 
      .WithMany() 
      .HasForeignKey(x => x.UserCode); 
    } 
} 

public class StaffMap : EntityMapBase<Staff> 
{ 
    protected override void SetupMappings() 
    { 
     base.SetupMappings(); 
     //this.HasKey(t => t.UserCode); 
     this.ToTable("TblStaff"); 
     this.Property(t => t.Id).HasColumnName("StaffID") 
     .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); 
     this.Property(t => t.UserCode).HasColumnName("User_Code"); 
     this.Property(t => t.DateOfBirth).HasColumnName("dob"); 
    } 
} 

aşağıdaki hatayı alıyorum: yabancı anahtar karşılaştırma almak için bir çözüm bulmak için etrafında arandı ve başarısız olmuş

The type of property 'UserCode' on entity 'ManagerUser' does not match the type of property 'Id' on entity 'Staff' in the referential constraint 'ManagerUser_StaffDetails'

ManagerUser, ID özelliği yerine Staff içinde UserCode özelliği ile.

+0

, sen kullanici_kodu belirten vardır Personeli için ForeignKey ... –

+0

Sen olamaz EF6'da bunu yapın. EF6, FK'yi yalnızca PK'nin ilişkilerin “asıl” ı oluşturabilir. –

cevap

0

Anahtarlarınız akıcı yapılandırmada biraz karıştırılır, HasKey, varlığın birincil anahtarını ayarlar. Aşağıda, her iki öğe için Kimlik olacak birincil anahtarı ayarladık. Sonra FK kullanici_kodu kullanın: Sen ManagerUser ve personel hem ve sametime birincil anahtar olarak kullanici_kodu atama

public class ManagerUserMap : EntityMapBase<ManagerUser> 
    { 
     protected override void SetupMappings() 
     { 
      base.SetupMappings(); 
      this.HasKey(t => t.Id); 
      this.ToTable("ManagerUsers"); 
      this.Property(t => t.Id).HasColumnName("ManagerUsersID") 
      .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); 
      this.Property(t => t.Title).HasColumnName("txtTitle"); 
      this.HasRequired(x => x.StaffDetails) 
       .WithMany() 
       .HasForeignKey(x => x.UserCode); 
     } 
    } 

    public class StaffMap : EntityMapBase<Staff> 
    { 
     protected override void SetupMappings() 
     { 
      base.SetupMappings(); 
      this.HasKey(t => t.Id); 
      this.ToTable("TblStaff"); 
      this.Property(t => t.Id).HasColumnName("StaffID") 
      .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); 
      this.Property(t => t.UserCode).HasColumnName("User_Code"); 
      this.Property(t => t.DateOfBirth).HasColumnName("dob"); 
     } 
    } 
+0

Yazımdaki kodu düzenledim. UserCode, her iki tablo için birincil anahtar değil. Staff.UserCode veritabanında ManagerUser.UserCode'ye bağlanır. Ben bir şekilde ManagerUser.UserCode için Staff.Id için ManagerUser.UserCode yerine Staff.UserCode bağlamak için söylemek gerekir. –

+0

Güncellenmiş kodu deneyin. DB'nizin güncel olduğundan emin olun. –

İlgili konular