2016-10-09 20 views
0

私は一致コードを生成する次のエンティティクラスを持っていますので、重複する一致が入力されないようにすることができます。EntityコンストラクタにDbContextを渡す必要がありますか?

public class CompanyMatch 
{ 
    public int ID { get; set; } 
    /// <summary> 
    /// {CompanyID}-{CompanyMatchMethod}-{CompaniesHouseRecordID} 
    /// </summary> 
    [StringLength(100)] 
    [Index(IsUnique = true)] 
    [Required] 
    public string MatchCode { get; set; } 
    public CompanyMatchMethod CompanyMatchMethod { get; set; } 
    public virtual Company Company { get; set; } 
    public virtual CompaniesHouseRecord CompaniesHouseRecord { get; set; } 

    public CompanyMatch(int companyId, CompanyMatchMethod matchMethod, int companiesHouseId) 
    { 
     this.MatchCode = companyId.ToString() + "-" + matchMethod + "-" + companiesHouseId.ToString(); 
     this.CompanyMatchMethod = matchMethod; 
     using (var db = new PlaceDBContext()) 
     { 
      this.Company = db.Companies.Find(companyId); 
      this.CompaniesHouseRecord = db.CompaniesHouseRecords.Find(companiesHouseId); 
     } 
    } 
} 

コンストラクタでコードの作成を処理する方が簡単なので、コンストラクタにも関係を設定させるようにしました。

これに伴う問題はMatchMethodを作成し、呼び出し元のコードが、それは新しいMatchMethodを追加することができます前に、ネストされたCompanyCompaniesHouseRecordを添付する必要があるということです。

これはすべて不器用な感じで、コンストラクタがパラメータとしてDbContextを取るべきかどうか、私はこれを別の方法で行うべきでしょうか?私はこのようにそれをやっているし、それが正常に動作しますが、私は、これはそれを行うの悪い方法であるかどうかわからないのです

public class CompanyMatch 
{ 
    public int ID { get; set; } 
    /// <summary> 
    /// {CompanyID}-{CompanyMatchMethod}-{CompaniesHouseRecordID} 
    /// </summary> 
    [StringLength(100)] 
    [Index(IsUnique = true)] 
    [Required] 
    public string MatchCode { get; set; } 
    public CompanyMatchMethod CompanyMatchMethod { get; set; } 
    public virtual Company Company { get; set; } 
    public virtual CompaniesHouseRecord CompaniesHouseRecord { get; set; } 

    public CompanyMatch(int companyId, CompanyMatchMethod matchMethod, int companiesHouseId, DbContext db) 
    { 
     this.MatchCode = companyId.ToString() + "-" + matchMethod + "-" + companiesHouseId.ToString(); 
     this.CompanyMatchMethod = matchMethod; 
     this.Company = db.Companies.Find(companyId); 
     this.CompaniesHouseRecord = db.CompaniesHouseRecords.Find(companiesHouseId); 
    } 
} 

答えて

0

なぜあなたは、エンティティフレームワークやEDMXとなるだろうwheter(使用しません)いくつかnavigation properties

自動的にリレーションを取得します。

+0

これを達成するためにナビゲーションプロパティを使用するにはどうすればよいですか? – Guerrilla

関連する問題