2011-01-25 9 views
0

私はこれら2つのエンティティを持っています。従業員のための一つ:エンティティ設計における外部キーの関係

[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; } 
} 

や部門のための1:私のデータベースで

[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にこれら2つのテーブル間の外部キー関係を有しています。しかし、私のエンティティクラスでは、これを指定するものは何もありません。

これらのクラスに何かを追加する必要がありますか?

答えて

2

なぜエンティティクラスを手動で生成していますか? (なぜsqlmetal.exeや.dbmlファイルを使用していないのですか?)クラスを手書きするのは方法ではありません。エンティティの定義方法にエラーがある場合、LinqToSqlは本当にひどい例外メッセージを出します。

あなたの質問に答えるには、はい、[Association]属性がありません。 (これはsqlmetal.exeによって生成されます)。これがなければ、テーブル/リレーションシップをまたいだLINQクエリを簡単に書くことはできません。以下のような

何か:

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

しかし、あなたは本当には手でこれを実行すべきではない

[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; } 
} 

は今、あなたはに似たクエリを記述することができます。

関連する問題