1

私は3つのテーブルを持っています:

Duty
Task :Duty
ProcessTask : Task

私は TPT 階層を使用していますが、データベースを作成するときはすべて問題ないようです。しかし、データベースから値を読み取ると、Duty テーブルから値が取得されません。これは私のクエリです:

var tasks = _dbContext.Duties.OfType<Task>()
                             .OfType<ProcessTask>()
                             .Where(c => c.ParentID == id);

Task と ProcessTask からの値のみが返されますが、SQL クエリはすべて正しい値を返しました (SQL プロファイラーで確認しました)。

最初の抽象クラスのフィールドをマップしないのはなぜですか? どんな助けでも大歓迎です。

私のソースコード:

public class Duty
    {
        public int ID { get; set; }        
    }

[Table("Task")]
    public class Task : Duty
    {
        public int ID { get; set; }

        public int? Duration { get; set; }

        public int? NoOfRepeats { get; set; }
    }

[Table("ProcessTask")]
    public class ProcessTask : DigiBob.Model.Governance.Duties.Task
    {
        public int ProcessTaskTypeID { get; set; }
        public virtual ProcessTaskType ProcessTaskType { get; set; } //ProcessTasks

        public int? ParentID { get; set; }
        [ForeignKey("ParentID")]
        public virtual ProcessTask Parent { get; set; }  //Children

        [Required(ErrorMessage = "A short description is required")]
        [MaxLength(150, ErrorMessage = "The maximum length for the short description is 150")]
        public string ShortDescription { get; set; }
    }

public class MyContext : DbContext
{
    public DbSet<Duty> Duties { get; set; }
}
4

2 に答える 2

0

ID フィールドを間違って参照していました。これは私が持っていたものです:

public static ProcessTaskView ConvertToProcessTaskView(this ProcessTask processTask)
    {
        ProcessTaskView processTaskView = new ProcessTaskView();
        processTaskView.ShortDescription = processTask.ShortDescription;
        processTaskView.ProcessTaskTypeID = processTask.ProcessTaskTypeID;
        processTaskView.ID = processTask.ID;

        return processTaskView;
    }

これは正しいコードです。

public static ProcessTaskView ConvertToProcessTaskView(this Duty processTask)
        {
            ProcessTaskView processTaskView = new ProcessTaskView();
            processTaskView.ShortDescription = (processTask as ProcessTask).ShortDescription;
            processTaskView.ProcessTaskTypeID = (processTask as ProcessTask).ProcessTaskTypeID;
            processTaskView.ID = processTask.ID;

            return processTaskView;
        }

現在、Duty オブジェクトを渡していることに注意してください。ProcessTask のプロパティにアクセスするには、Duty のタイプを指定する必要があります。ID フィールドに 0 だけでなく、値が含まれるようになりました。

助けてくれてありがとう

于 2013-04-07T09:13:53.707 に答える