0

Entity Framework で Table Per Hierarchy TPH を使用しています。これは基本的に、拡張データ型に共通のコア属性の部分クラスです。

2 つのオブジェクト/クラスがあります。と同じ基本プロパティを共有するCourseObject およびObject 。目標は、オブジェクトのいずれかで実行できるようにすることです。これをモデリングする際に助けが必要です。これはジェネリック型または継承型になりますか?StudentMyBaseCommonEntityService/ticket

私の質問: 親 ID を参照するために int を使用しています。テーブルの pK キーも int です。

  1. 循環参照を防ぐにはどうすればよいですか
  2. このチェックは設定中に行われますか
  3. Hierarchy id タイプはデフォルトでこの機能を提供しますか?
  4. タイプごとのテーブルと階層ごとのテーブルとクラスごとのテーブルの違いは何ですか`

    public partial class MyBaseCommonEntity
    {
        public int Id { get; set; }
        //Does it have any parents, does it belong to anyone
        public int? ParentId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    
        public System.DateTime CreatedDate { get; set; }
        public System.DateTime StartDate { get; set; }
        public System.DateTime? EndDate { get; set; }
    
        // Audit Stuff, whom, when why?
        public System.DateTime? AuditDate { get; set; }
        public string AuditUser { get; set; }
        public string AuditComments { get; set; }
    }
    
4

1 に答える 1

0

ここでは、階層サポート (id/parentid) とクラス継承 (1 つの基本クラスの再利用) の 2 つを混同していると思います。最初の 3 点は階層に関するものです。4 つ目は継承についてです。

  1. 私の知る限り、あなたが意味するスタイルの循環参照チェックは、EFでは直接サポートされていません。ただし、自分で行うこともできます(SQLサーバーの場合、たとえばCTEでCHECK制約を作成することにより)

  2. その形式の循環チェックは EF ではサポートされていないため、まったくチェックされません。

  3. HierarchyID は、EF では直接サポートされていません。ただし、hierarchyid のサポートを追加するサードパーティ ライブラリを確認できます。

  4. このポイントは、実際には親子に関するものではなく、データベースでクラスの継承をどのように表現するかに関するものです。あなたが言及したすべてのオプションは、対応する KB 記事で説明されています: Entity Framework による継承の実装

一般に、Student と Course を 1 つのものから継承させるのは良い考えではないようです。これらはほとんど無関係です。「AuditInfo」などのエントリをもう 1 つ作成し、そのエントリへの参照を Student クラスと Course クラスに追加するだけです。もっと理にかなっています。

于 2015-11-02T07:15:43.677 に答える