2011-11-15 6 views
1

私は3つのフィールドをCountry、Department、およびCityといいます。オートコンプリートを使用して外部キー参照を保存するか、新しい項目の場合は新しいエンティティを作成します

enter image description here

ユーザーがに入力できる私のデータベースにある3つのテーブルがあります。 jQueryオートコンプリート・ライブラリーでは、ユーザーが名前を入力して記入することができます。私は、ユーザーに既存の国/部門/都市を選択させてもらいたいのですが、そこに新しい項目を作成させることもできます。

Country  Department  City 
---------- ----------  --------- 
CountryId DepartmentId CityId 
Name  Name   Name 
      CountryId  DepartmentId 

私はこの一見単純なプロセスを理解しようとしています。

はここに私のコードです:

EFRegistryCountryRepository registryCountryRepository = new EFRegistryCountryRepository(); 
var country = registryCountryRepository.FindAllRegistryCountries().SingleOrDefault(c => c.Name == model.Country); 
if (country == null) 
{ 
    RegistryCountry newCountry = new RegistryCountry(); 
    newCountry.Name = model.Country; 
    registryCountryRepository.AddRegistryCountry(newCountry); 
    registryCountryRepository.SaveChanges(); 
} 

EFRegistryDepartmentRepository registryDepartmentRepository = new EFRegistryDepartmentRepository(); 
var department = registryDepartmentRepository.FindAllRegistryDepartments().SingleOrDefault(d => d.Name == model.Department && d.RegistryCountry.Name == model.Country); 
if (department == null) 
{ 
    RegistryDepartment newDepartment = new RegistryDepartment(); 
    newDepartment.RegistryCountryId = country.RegistryCountryId; 
    newDepartment.Name = model.Department; 
    registryDepartmentRepository.AddRegistryDepartment(newDepartment); 
    registryDepartmentRepository.SaveChanges(); 
} 

EFRegistryCityRepository registryCityRepository = new EFRegistryCityRepository(); 
var city = registryCityRepository.FindAllRegistryCities().SingleOrDefault(d => d.Name == model.City); 
if (city == null) 
{ 
    RegistryCity newCity = new RegistryCity(); 
    newCity.RegistryDepartmentId = department.RegistryDepartmentId; 
    newCity.Name = model.City; 
    registryCityRepository.AddRegistryCities(newCity); 
    registryCityRepository.SaveChanges(); 
} 

まず第一に、国が存在しない場合は、それがif (country == null)内で宣言されますから、私は、コードの部署ビットからその新しく作成された国にアクセスすることができない問題があります調子。

私はこれがうんざりしていると感じています。私はどのようにしてコードのこの要件の方法についての提案を感謝します。私の脳が私に言っているほど難しくないと確信しています。

+0

私はそれを理解しました私は可能な限り私の答えを掲示します。 –

答えて

0

多分あなたの質問を少し単純に見ているか、あなたの主なアイデアを理解していないかもしれませんが、EntityFrameworkに項目を保存すると変数をifの外側に設定できますあなたのコードの国ビットのインスタンスのためにそうDBからのID値を使用してIdフィールド、 は次のようになります。

var country = registryCountryRepository.FindAllRegistryCountries().SingleOrDefault(c => c.Name == model.Country); 
if (country == null) 
{ 
    RegistryCountry newCountry = new RegistryCountry(); 
    newCountry.Name = model.Country; 
    registryCountryRepository.AddRegistryCountry(newCountry); 
    registryCountryRepository.SaveChanges(); 
    **country = newCountry** 
} 

これは場合課にCountryIdをチェックするために国オブジェクトを使用することができますでしょうあなたはDepartment内で同じプロセスを使用することができます。都市で使用する場合If

関連する問題