2015-03-04 2 views
0

Я разрабатываю таблицу сотрудников, где я хочу, чтобы первичный ключ AspNetUsers был внешним ключом, а именно столбец Id. Как мне это сделать? До сих пор я пробовал это. Не знаю, правильно это или нет. Любая помощь будет оценена по достоинству.Первичный ключ AspNetUsers как чужой другой таблицы

[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int HumanResourceId { get; set; } 

    //foreign key of userid 
    public string UserId { get; set; } 
    [ForeignKey("UserId")] 
    public virtual ApplicationUser appuser { get; set; } 

    [Required, MaxLength(30),Index] 
    public string FirstName { get; set; } 

    public string MiddleName { get; set; } 

    [Required, MaxLength(25)] 
    public string LastName { get; set; } 

    [Required, MaxLength(10), Index(IsUnique = true)] 
    public string MobileNumber { get; set; } 

    [Required, DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 

    public DateTime? DateOfBirth { get; set; } 

    [Required] 
    [Column(TypeName = "ntext")] 
    public string Address { get; set; } 

    [Required] 
    public string Gender { get; set; } 

    [Required] 
    public DateTime? HireDate { get; set; } 

    public DateTime? Date_from { get; set; } 

    public DateTime? Date_to { get; set; } 

    public bool Active { get; set; } 

ответ

0

Вам не нужно иметь как UserId и AppUser свойства на вашей сущности.

Все, что вам нужно, это AppUser собственность и в вашем DbContext вы можете указать отображение следующим образом:

[Table("AspNetUsers")] 
public class ApplicationUser 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string Username { get; set; } 
} 

public class Employee 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int EmployeeId { get; set; } 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public virtual ApplicationUser AppUser { get; set; } 
} 

public class DbContext : System.Data.Entity.DbContext 
{ 
    public DbContext() 
     : base("name=DbContext") 
    { } 

    public IDbSet<ApplicationUser> Users { get; set; } 
    public IDbSet<Employee> Employees { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Employee>() 
      .HasRequired(x => x.AppUser) 
      .WithMany() 
      .Map(m => m.MapKey("UserId")); // Name of you FK column 
    } 
} 

Примечание 1: на самом деле, вы должны избегать оба свойства, потому что вы могли бы в конечном итоге с проблемой целостности данных (под этим я подразумеваю, что вам нужно будет обеспечить, чтобы UserId и AppUser.UserId всегда были одинаковыми).

Примечание 2: убедитесь, что ваш идентификатор пользователя является int и не string для лучшей производительности.

+0

Как это связано с таблицей AspNetUsers? Я хочу, чтобы 'id' этой таблицы был внешним ключом другой таблицы. – user3132179

+0

Вы можете использовать аннотацию данных, чтобы сообщить Entity Framework, для которой сопоставляются карты классов сущностей. Я соответствующим образом обновил свой пример. Кроме того, вы можете переименовать свой класс так же, как и в таблицу. Таким образом, вам не понадобится аннотация «Таблица». –

+0

'AspNetUsers' - это таблица, созданная при использовании аутентификации по умолчанию в MVC 5 с использованием VS 2013, которая использует' AspNet.Identity 2.0'. Я хочу связать PK этой таблицы с другой таблицей как внешний ключ. Думаю, ты не понял мой вопрос. – user3132179

Смежные вопросы