3

わかりました、これは簡単なはずですが、問題が発生しています。Region と Location の 2 つのクラスがあります。地域には多くの場所を含めることができますが、場所は 1 つの地域にしか存在できません。シンプルなもの。ここに私が持っているものがあります:

Location             Region 
---------            -------
int LocationID       int RegionID    
string Name          string Name
string BlahBlah      List<Location> Locations
string OtherStuff
int RegionID
Region Region

ここで、地域にホーム オフィスを追加する必要があります。ホームオフィスも場所です。Entity Framework が混乱しているように見えるので、明らかに間違ったことをしています。これは私がやろうとしていることです:

Location             Region 
---------            -------
int LocationID       int RegionID    
string Name          string Name
string BlahBlah      List<Location> Locations
string OtherStuff    int HomeOfficeID
int RegionID         Location HomeOffice
Region Region

ここで何が欠けていますか?

上記の内容が気に入らない場合は、次のクラスを参照してください。

 public class Region
{
    public int RegionID { get; set; }
    public string Name { get; set; }       
    public int HomeOfficeID { get; set; }
    public virtual Location HomeOffice { get; set; }
    public virtual List<Location> Locations { get; set; }
}

 public class Location
{
    public int LocationID { get; set; }
    public string Name { get; set; }              
    public int RegionID { get; set; }
    public virtual Region Region { get; set; }
}
4

1 に答える 1

1

したがって、「ホームオフィス」に他の場所以外のデータがない場合は、次の回避策があります。

Location             Region 
---------            -------
int LocationID       int RegionID    
string Name          string Name
string BlahBlah      List<Location> Locations
string OtherStuff
int RegionID         
Region Region
bool IsHomeOffice

これで、Region は読み取り専用プロパティを取得します。

public Location HomeOffice
{
    get { return Locations.FirstOrDefault(l => l.IsHomeOffice); }
}

また、IsHomeOffice に複数の場所を割り当てないようにするための検証コードも必要ですが、これで作業を開始できます。

編集: コメントにより、このアプローチではホームオフィスを地域の外に配置することはできないことがわかりました。最初の考えはありそうにありませんが、おそらく「ホームオフィス」は、地域の人事スタッフが配置されている場所を意味します。現在、HomeOffice は常に地域内にありますが、将来的には、会社は地域の人事をリモートで行うことを決定する可能性があります。この限られた例では、適応するのはそれほど難しくありませんが、データ モデルが複雑になるにつれて、データ モデルの構造を変更する必要がある場合は、より困難になる可能性があります。常に構造に依存してルールを適用するのではなく、構造を柔軟に保ち、入力時にデータ検証を追加することを検討してください。

于 2013-08-30T16:17:36.643 に答える