2017-01-20 13 views
0

私は読み取り専用のビュー(dbo.HRINFO)を持っています。私はそれを表現するために以下のオブジェクトを構築しました。私はまた、このビューへのFKを含む "User"テーブルを持っていますが、公式の制約は定義できません。私は "User"オブジェクトを持っているときはいつでも "UserInfo/view"データにアクセスできるようにナビゲーションプロパティを設定しようとしています。コードファーストエンティティフレームワーク、新しいテーブルを変更できないビューに関連付ける

[Table("dbo.HRINFO")] 
public class UserInfo 
{ 
    [Key] // But it's not really a key, there is no key, but it is null or unique 
    public string EMAIL_KEY { get; set; } 
    ... more properties 
} 

そして、私が作成していますテーブルには、私は上記のビューに関連することを:

public class User 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Email_Key { get; set; } // can be a FK to above view 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public virtual UserInfo UserInfo { get; set; } 
    ... more properties 
} 

私は無駄に流暢なAPIを使用してみました(以下、同様に多くのバリエーション) :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<UserInfo>().HasKey(t => t.EMAIL_KEY).ToTable("dbo.HRINFO"); 
     modelBuilder.Entity<User>().HasKey(t => t.Id).HasRequired(t => t.UserInfo); 
    } 

ビューに制約を追加することができないため、私がやりたいことではないということができます。代わりに、Userオブジェクトの{@ {EMAIL_KEY = this.Email_Key}}}というビューからパブリック仮想UserInfo {get {[sql select *]を置くことはできますか?または何か類似している?どうやって?

+0

質問は分かりません。 –

+0

*ビューに制約を加えることはできません。*その意味を説明してください。ランタイムエラー?間違った結果? ... –

+0

申し訳ありませんが、明確ではない - 私は変更する権限を持っているという見解ではありません。私は別の部門が所有するデータであるため、読み取り専用アクセス権を持っています。 – Josh

答えて

0

これは私が思いついた最高のものです。私は新しい文脈/内部の選択が気に入らない。私はそれが将来私をかむために戻ってくるだろうと確信しています。私は他のアイデアを歓迎する。

public class User 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Email_Key { get; set; } 

    [NotMapped] 
    public virtual UserInfo UserInfo 
    { 
     get 
     { 
      return new Context().UserInfoes.Single(u => u.EMAIL_KEY == Email_Key); 
     } 
    } 
} 
関連する問題