Отношения внешнего ключа в дизайне объекта - PullRequest
0 голосов
/ 26 января 2011

У меня есть эти две сущности.Один для сотрудников:

[Table(Name = "Employees")]
public class Employee
{
    [HiddenInput(DisplayValue = false)]
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public int UserID { get; set; }

    [Column]
    [Required(ErrorMessage = "Please enter a first name")]
    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [Column]
    [DisplayName("Last Name")]
    [Required(ErrorMessage = "Please enter a last name")]
    public string LastName { get; set; }

    [Column]
    [DisplayName("Department")]
    [Required(ErrorMessage = "Please select a department")]
    public int DepartmentID { get; set; }
}

И один для отделов:

[Table(Name = "Departments")]
public class Department
{
    [HiddenInput(DisplayValue = false)]
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
    public int DepartmentID { get; set; }

    [Column]
    [Required(ErrorMessage = "Please enter a department name")]
    public string Name { get; set; }
}

В моей базе данных между этими двумя таблицами на DepartmentID есть связь по внешнему ключу.Но в моих классах сущностей у меня нет ничего, что бы это указывало.

Нужно ли что-то добавить к этим классам?

1 Ответ

2 голосов
/ 26 января 2011

Почему вы создаете вручную классы сущностей?(почему вы не используете файлы sqlmetal.exe и / или .dbml?) Ручное написание классов - не лучший способ, поскольку LinqToSql выдает действительно ужасные сообщения об исключениях, когда ошибка связана с определением сущностей.

Но чтобы ответить на ваш вопрос, да, вам не хватает атрибутов [Association].(который sqlmetal.exe сгенерировал бы для вас.) Без этого вы не можете так просто писать запросы LINQ, которые работают между таблицами / связями.

Что-то вроде:

[Column]
[DisplayName("Department")]
[Required(ErrorMessage = "Please select a department")]
public int DepartmentID { get; set; }

private EntityRef<Department> department;

[Association(IsForeignKey = true, ThisKey = "DepartmentId"]
public Department Department 
{ 
    get { return department.Entity; }
    set { department.Entity = value; }
}

Теперь вы можете писать запросы, похожие на:

db.Employees.Where(x => x.Department.Name == "Accounting");

Однако вы действительно делать не должныэто от руки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...