2011-01-03 14 views
2

新しいレコードを編集または追加するときに、Entity Frameworkでforiegnキーを処理する方法を検討するために戦っています。たとえば、タイムゾーンテーブルにリンクするtimezone_idを持つpersonテーブルがあります。ASP.Netエンティティフレームワークと外部キー

しかし、モデルにはtimezone_idが含まれていないようです。私はそれが新しいやり方であると思っていますが、どうすれば私の記録を保存できますか?

私の方法:

public static string CreateUser(string username, string email, string password, string firstname, string surname, int timezoneId) 
    { 
     user u = new user(); 
     u.surname = surname; 
     u.firstname = firstname; 
     u.email = email; 
     u.password = password; 
     u.username = username; 
     Db.AddTousers(u); 

     Db.SaveChanges(); 

     return username; 

    } 

私はu.timezone_id = timezoneid行うことはできません。

私はu.timezone(実際のエンティティと思われる)とu.timezoneReferenceしか持っていませんが、これは何をすべきか分かりません。

+1

EFについて話すとき、バージョンはかなり重要です。 –

答えて

1

私はあなたがEF3とセット名を生成したと仮定すると、すなわち

u.timezone = DB.TimezoneSet.FirstOrDefault(tz => tz.Id == timezoneid); 

、あなたは、データベースからタイムゾーンのエンティティに記入しなければならないと思います。 EF4ではデフォルトでDB.Timezonesになります。これがEF4の場合は、ID列も含めてそのテーブルのEDMXを再生成することもできます。ウィザードの最初のページにオプションがあります。

TimezoneReferenceプロパティをロードするためにそれらを強制し、子エンティティがロードされているかどうかをテストするために使用される、など

+0

ありがとうHenk!それがそれでした。 – Craig

1

私だけ

をu.timezoneているはい、モデルは、ナビゲーションプロパティとしてFKを公開する必要があります。タイムゾーンオブジェクトをそこに割り当ててください。

+0

ありがとうHenk - あなたはそれを助けることができますか?どのように私はそれを割り当てるだろうか?私はu.timezone_id = timezoneidを実行できると思った。 - しかし、私はできません。タイムゾーンオブジェクトを割り当てるにはどうすればいいですか?私のドロップダウンリストは説明とIDのみを持っています...だから、Idをメソッド(int)に渡しています。 – Craig

+0

Idを使用して(コンテキストから)TimeZoneをルックアップするか、完全なTimeZonesを保持するようにリストボックスを変更することができます。 –

1

あなたは、なりますがEF V1を使用している、とあなたはそれがあるとしてオブジェクトを追加したくない場合これを行う必要があります。

u.TimezoneReference.EntityKey = new EntityKey("DB.TimeZone", "ID", id) 

idは外部キーです。

EF v4を使用していてまだforgeignキーが公開されていない場合は、モデル作成中に外部キーを生成するオプションをチェックしなかったと思います。

関連する問題