0

エンティティ フレームワークを使用してデータベースを構築しようとしていますが、モデルに関するヘルプが必要です。

モデルは、Company、Departments、Users、TaskType1、TaskType2、TaskType3 です。

public class Company
{
    public Company()
    {
         this.Departments = new HashSet<Department>();
    }
    public int Id { get; set;}
    public string CompanyName { get; set;}
    public string Address { get; set;}
    public string Phone { get; set;}

    public virtual ICollection<Department> Departments { get; set;}

}

public class Department
{
    public Department()
    {
        this.Users = new HashSet<User>();
    }
    public int Id { get; set;}
    public string Name { get; set;}

    public virtual Company Company { get; set;}
    public virtual ICollection<User> Users { get; set;}
}

public class User
{
    public Company()
    {

    }
    public int Id { get; set;}
    public string UserName { get; set;}
    public string FullName { get; set;}

    public virtual Department Department { get; set;}               
}


public class TaskType1
{
    public TaskType1()
    {

    }
    public int Id { get; set;}
    public string Name { get; set;}
    public string Description { get; set;}
    public int Priority { get; set;}        
}

public class TaskType2
{
    public TaskType2()
    {

    }
    public int Id { get; set;}
    public string Name { get; set;}
    public string Description { get; set;}
    public int Priority { get; set;}    
    public double EstimatedCosts { get; set;}
}

public class TaskType3
{
    public TaskType3()
    {

    }
    public int Id { get; set;}
    public string Name { get; set;}
    public string Description { get; set;}
    public int Priority { get; set;}    
    public bool IsDone { get; set;}     
}

TaskType1、TaskType2、TaskType3 をテーブルとして持つ必要がある理由は、さまざまな種類のタスクがあるためです (さまざまなデータ/フィールドが必要です)。

次のような結果が得られるように、自分のタスク タイプを会社、部門、およびユーザーに接続するにはどうすればよいですか。

  • 会社ごとのすべてのタスク X
  • 会社 x から部門 z に割り当てられたすべてのタスク
  • 会社 x の部門 z のユーザー w に割り当てられたすべてのタスク

PSタスクタイプには共通の列と異なる列があります

4

1 に答える 1

0

モデル間の関係を確立する必要があります。たとえば、会社 X ごとにすべてのタスクを取得するには、各 Tasks テーブルに companyID 列が必要であり、それを Company テーブルへの外部キーにする必要があります。次に、Company モデルでナビゲーション プロパティを設定できます。

public virtual ICollection<TaskType1> TasksType1 { get; set; }

会社は複数のタスクを持つことができるため、ここで ICollection を使用します...各会社が 1 つのタスクしか持てない場合は、次のようにすることができます。

public virtual TaskType1 TaskType1 { get; set; }

これにより、次のようにタスクにアクセスできます。

companies = db.Companies.Include(i => i.TasksType1);

Contoso University のチュートリアルを確認しましたか? 階層モデルと関連する関係を確立するための優れた入門書です。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

(これは MVC バージョンです。必要に応じて WebForms バージョンのチュートリアルもあります)

于 2013-09-26T18:52:58.147 に答える