• ベストアンサー
  • 困ってます

EF CodeFirst についての質問

entity framework code first についての質問です。 既存のデータベースから移行するときに詰まってしまいました。お助けください。 複数の外部キーを同テーブルから参照している場合Entityクラスにはどう外部キーを書けばいいのでしょうか? 例 class Store{ public int StoreId {get;set;} public int UserId {get;set;} public int UserId2 {get;set;} * この部分です public virtual User User {get;set;} } class User{ public int UserId {get;set;} public int Name {get;set;} public virtual ICollection<Store> Stores { get; set; } } いろいろ検索して調べてみたのですが解決できませんでした。 よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数216
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • onos
  • ベストアンサー率81% (127/155)

http://my-clip-devdiary.blogspot.jp/2011/01/aspnet-mvc-3entity-framework-code.html Fluent APIで実装してる例、かな? 既存のDBがあるならCodeFirst使うよりDBファーストでモデルつくって、必要ならそこからPOCOクラスを生成させたほうが楽な気がします。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます まさにこれが知りたい情報でした

関連するQ&A

  • C#クラスについて教えてください

    下記通りクラスを作成した場合、プロパティaを配列にできますか? class Class1 { public string a { set; get; } public int b { set; get; } public int c { set; get; } } イメージとしては下記通りにしたいのですが、なかなかうまく行きません。 class Class1 { public Class1(int x) { } public string a[x] { set; get; } public int b { set; get; } public int c { set; get; } } private void Form1_Load(object sender, EventArgs e) { Class1 f = new Class1(2); f.a[0] = "asdf"; f.a[1] = "asdfa"; f.a[2] = "asdfasd"; f.b = 1; f.c = 2; } 初心者なんで、やさしく教えてください。お願いします。

  • C++基底クラスに戻り値の異なる関数が宣言されている場合

    こんにちは。 質問させてください。 以下のようなコードがあったとします。 class Base1 { public:   virtual int get()=0; }; class Base2 { public:   virtual float get()=0; }; class Ex : public Base1, public Base2 { public:   int get(){return 0;}   float get(){return 0.0f;} }; void main() { } このプログラムをコンパイルすると 「'Ex::get': オーバーライドする仮想関数の戻り値の型が異なり、'Base1::get' の covariant ではありません。」 というエラーが出てしまいます。 関数の名前と引数が同じで戻り値だけが異なる場合はエラーが出るのはわかるのですが、基底クラスのBase1、Base2は変更不可能だとするとどのように回避すればいいのでしょうか? よろしくお願いします。 /*   WindowsXP Professional SP3   VisualStudio2005 AcademicEdition */

  • interface プロパティ

    【ケース1】 class Class1 { public string str { get; set; } public int x { get; set; } } 【ケース2】 class Class1 : Class2, Class3 { public string str { get; set; } public int x { get; set; } } interface Class2 { int x { get; set; } } interface Class3 { string str { get; set; } } インターフェースのプロパティの実装をしています、【ケース2】です。 これと【ケース1】ってどこがどう違うのでしょうか?何か同じな感がぬぐえません class2とclass3のプロパティを再定義してるという感がしません。。 実装の仕方がまちがってる場合はご指摘ください。お願いします。

    • ベストアンサー
    • Java
  • C#でレート別に管理するクラスを作りたい

    本の管理をするアプリを作っている時にまた疑問が出てきました。 public class Book { public string Title { get; set; } public string ISBN { get; set; } public Money Money { get; set; } public int Rate { get; set; } public DateTime BuyDate { get; set; } } 本の管理にレートをつけられるようにしようと思っています。 iTunesの★マークのようなものにしたいので1&#65374;5の固定です。 つけていないものもあるので0も存在します。 ここでレートを付けている本を、それぞれのレート別にグループに分けたいと思いました。 そこでレート1&#65374;レート5までのグループをどのように管理するのがベストというか、どのように考えればいいのでしょうか。 私が考えたのは、グループ別に処理が分かれるのでクラスを作った方がいいと考えたのです。 とりあえず同じ処理もいくつか発生するので public abstract class AbstractRate { public int Value { get; set; } private static BookCollection _bookCollection; //全ての本が入る public BookCollection BookCollection { get { return _bookCollection; } } } みたいな基底クラスを作り public class Star1 :AbstractRate { private BookCollection _books; } から Star5までの似たようなクラスを作り、それぞれのレートのBookコレクションを持たせる形です。 ただこれだと同じようなクラスが増えるだけでものすごく冗長だと思うのです そこでもう一つ思ったのは public class GroupClass { public string GroupName { get; set; } public BookCollection BookCollection { get; set; } } という形でグループ名と本のリストを入れておく形です。 これだとクラスは分かりやすくていいのですが、毎回処理をさせる際にこの名前のグループならこれみたいな処理が必要になる気がして悩んでいます。 実際どのように考えるのがいいのでしょうか? 直接的な回答でなくてもいいのですが、考える材料が欲しいです。 よろしくお願いします。

  • 個々の関数について継承しているかどうかを判定したいんですが、

    個々の関数について継承しているかどうかを判定したいんですが、 class CBase {public: virtual int A(){return 0;} virtual int B(){return 0;} }; これが規定クラスだとして、 class CTest : public CBase {public: int A(){return 1;} int B(){return 1;} }; のクラスが存在します。 一番有効だと思ってるのが、上記を変えて CBase :: virtual int A(){throw this_base; return 0;} のように書けば判定できると思いますが、例外を使うよりもいい方法はありませんか。

  • 永続化前後のクラスの表現について C#

    ものすごくくだらない質問ですみません。 リレーショナルデータベースを使わざるを得なく、O/Rマッピングツールは使えない状況です。 class Employee があります。 StaffCodeがありますが、将来このコードが重複はありませんが変わる可能性があるので永続化を目的としてこれを主キーとして使えません。 そこで主キーにサロゲートキーを使おうと考えました。 アプリ側で対応するよりもデータベース側でオートナンバーを使います。 一応下記コードでこれから採番する社員と、永続化&採番したあとの社員を表現する事はできます。 しかし同じクラスを使うものなのでしょうか? クラスを分けるべきでしょうか? そもそも考え方がおかしいですか? Class Employee { Public Int Id { get; private set; } Public String Name { get; private set; } Public Int StaffCode { get; private set; } Public Employee(String name, Int staffCode) { this.Name = name; this.StaffCode = staffCode; } Public Employee(Int id, String name, Int staffCode) { this.Id = id; this.Name = name; this.StaffCode = staffCode; } Public Void SetId(Int id) { this.Id = id; } }

  • 2次元配列にポインタを格納

    http://www.okweb.ne.jp/kotaeru.php3?q=505241の訂正版の質問です。 VC++6.0を使っております。 下のようなプログラムを作ってみました。 #include <stdio.h> #include <vector> using namespace std; class c{ public: c(); virtual ~c(); int get(){return j;}; void set(int i){j=i;}; private: c(const c &right); const c &operator=(const c &right); int j; }; void main(){ vector <vector<c*> > a; c *b; for(int n=0;n<10;n++){ for(int i=0;i<10;i++){ b=new c; a[n].push_back(b); } } for(int j=0;j<10;j++){ for(int i=0;i<9;i++){ a[i][j] -> set(i+j); } } for(j=0;j<10;j++){ for(int i=0;i<9;i++){ printf("%d ",a[i][j] -> get()); } printf("%d\n",a[9][j] -> get()); } for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ delete a[i][j]; } } } すると、コンパイルには成功するのですが、実行は出来ません。 その理由は、「外部参照1が未解決」だそうです。 アドバイスをお願いいたします。

  • boost::shared_ptr::getにて

    こんにちは。 C++で書かれたプログラムの保守をしています。 以下のような感じで書かれたクラスがあります。 class Foo { public :   Foo(){} ;   virtual ~Foo(){} ;   void Set( boost::shared_ptr< int > pValue )   {     _pValue = pValue.get() ;   } protected :   void* _pValue ; } ; このクラスから _pValue を再び boost::shared_ptr< int > にして取得するにはどうしたら良いのでしょうか? 強引に、 boost::shared_ptr< int > Get( void ) {   boost::shared_ptr< int >  temp ;   temp.reset( (int*)_pValue ) ;   return temp ; } とやっても案の定ダメでした。 void* _pValue の部分はいろいろ使われていて変更できません。 何かよい手段はないものでしょうか?

  • 仮想関数と継承について

    #include <iostream> using namespace std; class AAA { public: virtual aaa() { cout <<"aaa(void)"<<endl;} }; class BBB : public AAA { public: virtual aaa(int a) { cout <<"aaa(int)"<<a<<endl;} }; int main() { BBB bbb; bbb.aaa();<--これがエラーになります。 return 0; } どうして、既定クラスの引数なしのaaa()はよぶことが できないのでしょうか?

  • LINQでn:nテーブルを階層オブジェクトに

    お世話になっております。 表題のテーマについて、理解いただける方にアドバイスお願いします。 会員を表すMembersというテーブル、 種別を表すTypesというテーブル、 会員と種別を結び付けるMemberTypeBindsというテーブルがあって、会員・種別がn対nで定義されています。 Membersの件数は200件ほど、Typeは20件程度。だいたいMembersは1&#65374;5くらいのTypeに紐づいています。 Table Members int ID(主キー, autoIncrement) varchar(20) MemberName Table Types int ID(主キー, autoIncrement) varchar(20) TypeName Table MemberTypeBinds int memberID(外部キー, MembersのID) int typeID(外部キー, TypesのID) これを、LINQで下記のクラスオブジェクトに抽出したいと思っています。 今は全件表示でもいいですが、そのうちページングで表示する必要がでてくると思います。 public class MemberTypes {  public Member member { get; set; }  public List<Type> types { get; set; } } どうやるかがわかりません。LINQはこんな感じだと思うのですが、 public List<MemberTypes> GetMemberTypes(){  using (var dc = new DataContext()){   var result = dc.MemTypeBinds    .GroupBy(mt=>mt.Member)    // このあと、どうやったらいいかがわかりません。    // DBから階層化オブジェクトを生成するのは    // けっこう頻出のテーマだと思うので、しっかりマスターしたいです。   }).ToList();   return result;  } } LINQに詳しい方、お助けください。