3

既存のデータベースのデータモデルの構成に数え切れないほどの時間を費やした後、誰かが私にもっと洞察を提供してくれることを願っています。私は次のデータベース構造を持っています

User (Table)
    UserID  (P.K Identity int)
    UserName (nvarchar)

UserSetting (Table)
    UserSettingsID (P.K Identity int)
    UserSettingsUserID (F.K of User.UserID)

モデルには、ユーザーエンティティのプロパティUserSettingとユーザー設定エンティティのUserプロパティがあります。

ユーザー設定エンティティタイプの構成。

 this.HasRequired(t => t.User)
     .WithMany(t => t.UserSetting)
     .HasForeignKey(d => d.UserSettingsUserID)
     .WillCascadeOnDelete(false);

上記は、ユーザーエンティティでUserSettingをICollectionとして作成した場合にのみ機能します(これは、現時点で私が持っている唯一のソリューションです)。外部キー属性とネット上で見つけられるほとんどすべてのものを設定しようとしましたが、うまくいきませんでした。リポジトリパターンと作業単位を使用してエンティティフレームワークでコーディングするのはこれが初めてです。

4

3 に答える 3

2

解決策については、この男のブログを確認してください。

http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to-one-foreign-key-associations.aspx

基本的:

modelBuilder.Entity<User>().
HasRequired(us => us.UserSetting).
WithMany().
HasForeignKey(u => u.UserSettingId);

User彼がどのようにクラス プロパティとプロパティの名前を構造化したかに細心の注意を払ってください。それに応じて名前が一致する必要があります。

ところで、エンティティをデータ注釈で装飾することは、Fluent API を使用するよりもはるかに簡単です。

于 2012-06-24T10:54:17.220 に答える
2

このスキーマは、EF 4.x での 1 から 0..1 へのエンティティ マッピングに使用できます。

Table Users
    UserID int, PK, Identity
    UserName nvarchar

Table UserSettings
    UserID int, PK, non-Identity, FK to Users
    Settings nvarchar(max) or any other type

または、EF 4.x での 1 対 1 のエンティティ マッピングのこのスキーマ (テーブルを 2 つのエンティティに分割):

Table Users
    UserID int, PK, Identity
    UserName nvarchar
    Settings nvarchar(max) or any other type

テーブル分割のリンク:
Using DB-First
Using Code-First

于 2012-06-24T11:47:15.167 に答える
0

1 対 1 を探している場合、UserSetting テーブルには 1 つの主キーが必要であり、このキーは同時に User テーブルへの外部キーである必要があります。

User (Table) UserID (PK Identity int) UserName (nvarchar) UserSetting (Table) UserSettingsID (PK Identity int AND User.UserID の FK)

于 2012-06-24T10:54:34.080 に答える