2015-07-13 4 views
1

Как мне настроить или отобразить свойство навигации?Добавление отношений и свойств навигации

У меня есть таблица Employee и в настоящее время он корректно отображаться EmployeeStatusId но то, что я хотел бы иметь EmployeeStatusText вместе с EmployeeStatusId как бы я справиться с этим?

У меня есть следующие модели:

Employee.cs

public class Employee 
{ 
     [Key] 
     public int? RecordId { get; set; } 
     public string company{ get; set; } 
     public string Name{ get; set; } 
     public int? EmployeeStatusId { get; set; } 
} 

EmployeeStatus:

public class EmployeeStatus 
{ 
    public int Id{ get; set; } 
    public string Name { get; set; } 
} 

DbContext:

public class DataCenterDB : DbContext 
{  
    public DbSet<Employee> Employees { get; set; } 
    public DbSet<EmployeeStatus> EmployeeStatus { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Employee>().ToTable("Employee"); 
     modelBuilder.Entity<EmployeeStatus>().ToTable("EmployeeStatus"); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

ответ

0

В вашем использовании вид:

@Html.DisplayFor(x => x.EmployeeStatus.Name) 

Это значение будет иметь значение EmployeeStatus для вашей модели. Пока ваши отношения правильны, Entity Framework автоматически свяжет их.

В модели

public class Employee 
{ 
    [Key] 
    public int RecordId { get; set; } 
    public string company{ get; set; } 
    public string Name{ get; set; } 
    public int EmployeeStatusId { get; set; } 
    public virtual EmployeeStatus EmployeeStatus {get;set;} 
} 

public class EmployeeStatus 
{ 
    public int Id{ get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Employee> Employees { get; set; } 
} 

Я использовал ключевое слово виртуальный в классе, так что знает, чтобы связать объект Employee к объекту EmployeeStatus. Кроме того, если это внешний ключ Отношение EmployeeStatus ID не должен быть обнуляемым

+0

, но разве вам не нужно определять отношения или сопоставление? –

+0

Что ты имеешь в виду? – code

+0

Мне не нужно определять ссылку? посмотрите здесь https://msdn.microsoft.com/en-us/data/jj713564.aspx –

1

Прежде всего следует определить EmployeeStatus свойства так:

public class Employee 
{ 
    // other properties 

    [ForeignKey("EmployeeStatusId")] 
    public virtual EmployeeStatus EmployeeStatus { get; set; } 
    public int? EmployeeStatusId { get; set; } 
} 
public class EmployeeStatus 
{ 
    public int Id{ get; set; } 
    public string Name { get; set; } 
} 

Затем внутри вашего метод действия контроллера вы должны заселить список EmployeeStatus :

ViewBag.StatusList = new SelectList(_statusService.GetAllStatus(), "Id", "Name"); 

Finaly на ваш взгляд, вы можете это этот код для отображения данных внутри выпадающего:

<div class="form-group"> 
    @Html.LabelFor(model => model.EmployeeStatusId, new { htmlAttributes = new { @class = "form-control" } }) 
    <div> 
     @Html.DropDownList("EmployeeStatusId", (SelectList)ViewBag.StatusList, "-- Select ---", new { @class = "form-control"}) 
     @Html.ValidationMessageFor(model => model.EmployeeStatusId, "", new { @class = "text-danger" }) 
    </div> 
</div> 
+0

1+ Я не думаю, что вы необходимо определить Foreignkey, если вы не работаете с первым подходом к коду –

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