質問編集履歴

3

コード部分を見やすく修正

2021/06/22 14:05

投稿

step.step.step
step.step.step

スコア4

test CHANGED
File without changes
test CHANGED
@@ -42,38 +42,48 @@
42
42
 
43
43
  Modelsに
44
44
 
45
+ ```c#
46
+
45
47
  public class Record
46
48
 
47
49
  {
48
50
 
49
- public int Id { get; set; }
51
+  public int Id { get; set; }
50
-
51
-
52
-
52
+
53
+
54
+
53
- ~中略~
55
+  //~中略~
54
-
55
-
56
-
56
+
57
+
58
+
57
- public string ApplicationUserId { get; set; }
59
+  public string ApplicationUserId { get; set; }
58
-
59
-
60
-
60
+
61
+
62
+
61
- public virtual ApplicationUser ApplicationUser { get; set; }
63
+  public virtual ApplicationUser ApplicationUser { get; set; }
62
-
64
+
63
- }
65
+ }
66
+
67
+
68
+
64
-
69
+ ```
65
-
66
70
 
67
71
  として、コンテキストは
68
72
 
73
+ ```c#
74
+
69
75
  public class RecordContext:DbContext
70
76
 
77
+
78
+
71
79
  {
72
80
 
73
81
  public DbSet<Record> Records { get; set; }
74
82
 
75
83
  }
76
84
 
85
+ ```
86
+
77
87
  で作っていたのですが、テストのユーザーを作成して、データを登録してもみてもRecordsテーブルのApplicationUserId はNullのままで、ユーザー識別の役に立ちませんでした。
78
88
 
79
89
 
@@ -148,20 +158,26 @@
148
158
 
149
159
  コンテキスト
150
160
 
161
+ ```C#
162
+
151
-   public class RecordContext:DbContext
163
+ public class RecordContext:DbContext
152
-
164
+
153
- {
165
+ {
154
-
166
+
155
- public DbSet<Record> Records { get; set; }
167
+  public DbSet<Record> Records { get; set; }
156
-
168
+
157
- //public DbSet<ApplicationUser> ApplicationUser { get; set; }
169
+  //public DbSet<ApplicationUser> ApplicationUser { get; set; }
158
-
170
+
159
- }
171
+ }
172
+
173
+
174
+
160
-
175
+ ```
161
-
162
176
 
163
177
  コントロール
164
178
 
179
+ ```c#
180
+
165
181
  [HttpPost]
166
182
 
167
183
  [ValidateAntiForgeryToken]
@@ -170,25 +186,25 @@
170
186
 
171
187
  {
172
188
 
173
- if (ModelState.IsValid)
189
+   if (ModelState.IsValid)
174
-
190
+
175
- {
191
+   {
176
-
192
+
177
- record.ApplicationUserId = User.Identity.GetUserId();
193
+    record.ApplicationUserId = User.Identity.GetUserId();
178
-
194
+
179
- db.Records.Add(record);
195
+    db.Records.Add(record);
180
-
196
+
181
- db.SaveChanges();
197
+    db.SaveChanges();
182
-
198
+
183
- return RedirectToAction("Index");
199
+    return RedirectToAction("Index");
184
-
200
+
185
- }
201
+   }
186
-
187
-
188
-
202
+
189
- return View(record);
203
+  return View(record);
190
-
204
+
191
- }
205
+ }
206
+
207
+ ```
192
208
 
193
209
  ApplicationUserIdを登録することができて、一覧画面でもログイン中のユーザーさん分だけの表示ができました!!
194
210
 

2

現状についての追記

2021/06/22 14:05

投稿

step.step.step
step.step.step

スコア4

test CHANGED
File without changes
test CHANGED
@@ -86,7 +86,9 @@
86
86
 
87
87
  を入れて作成しようと思いました。
88
88
 
89
+
90
+
89
- -------------------------------------
91
+ -----追記終了--------------------------------
90
92
 
91
93
 
92
94
 
@@ -131,3 +133,77 @@
131
133
  また、まちがってないとするとどのようにすれば主キーは定義できるでしょうか。
132
134
 
133
135
  なにとぞ、よろしくお願いいたします。
136
+
137
+
138
+
139
+ -----現状についての追記 2021/06/22--------
140
+
141
+ SurferOnWww さんからのアドバイスで余計なことを考えずに、データを登録するコントロールの中で、
142
+
143
+ ApplicationUserIdを登録するだけでよいのではと、考えてみました。
144
+
145
+
146
+
147
+ 早速、以下でやってみました。
148
+
149
+ コンテキスト
150
+
151
+   public class RecordContext:DbContext
152
+
153
+ {
154
+
155
+ public DbSet<Record> Records { get; set; }
156
+
157
+ //public DbSet<ApplicationUser> ApplicationUser { get; set; }
158
+
159
+ }
160
+
161
+
162
+
163
+ コントロール
164
+
165
+ [HttpPost]
166
+
167
+ [ValidateAntiForgeryToken]
168
+
169
+ public ActionResult Create([Bind(Include = "Id,YMD,DOW,Attend,Leave,Task,Updatetime")] Record record)
170
+
171
+ {
172
+
173
+ if (ModelState.IsValid)
174
+
175
+ {
176
+
177
+ record.ApplicationUserId = User.Identity.GetUserId();
178
+
179
+ db.Records.Add(record);
180
+
181
+ db.SaveChanges();
182
+
183
+ return RedirectToAction("Index");
184
+
185
+ }
186
+
187
+
188
+
189
+ return View(record);
190
+
191
+ }
192
+
193
+ ApplicationUserIdを登録することができて、一覧画面でもログイン中のユーザーさん分だけの表示ができました!!
194
+
195
+
196
+
197
+ 回答をされることなく追加質問だけで、わたしのやりたいことの実現まで導いてくださってありがとうございます。
198
+
199
+
200
+
201
+ ただ、こんなやり方が本当に良いのか解ってないですし、何より初めの質問内容がどうしてありえないことなのかもまったく解っていません。
202
+
203
+ ご負担になってしまうのかもしれませんが、わたしの実現の仕方のついてのご意見や、初めのコンテキストがありえないことであり、得ないエラーがでていることについての概略でも教えて頂けると嬉しいです。
204
+
205
+ なにとぞ、よろしくお願いします。
206
+
207
+
208
+
209
+ -----現状についての追記終了--------

1

質問内容を追加しました

2021/06/22 13:59

投稿

step.step.step
step.step.step

スコア4

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,92 @@
3
3
  ASP.NET MVC5
4
4
 
5
5
  で学習をしています。
6
+
7
+
8
+
9
+ ------以下追記します 2021/06/22---------
10
+
11
+
12
+
13
+ いま、作りたいなと思っているのは架空の学校で登校時間、下校時間などを各ユーザーが
14
+
15
+ 自分で登録するサイトです。
16
+
17
+
18
+
19
+ ユーザーさんにはidentity機能で個別にログインしてもらい、登校時間など入力して
20
+
21
+ submitボタンを押すと、その登校時間などの情報をRecordsテーブルに登録されます。
22
+
23
+ その時、Recordsテーブルにはどのユーザーさんの情報か識別できるようにするために、
24
+
25
+ string のApplicationUserId列を作って自動的にApplicationUserIdを登録させようと思っています。
26
+
27
+
28
+
29
+ また、過去に登録したことのあるユーザーさんが自分の登録した分の結果を一覧でみることが
30
+
31
+ できるようにするためにも、ApplicationUserId列は使用したいと考えています。
32
+
33
+
34
+
35
+ つまり、各ユーザーさんはログインして自分の分しか登録できないし、自分の分しか登録されたものを
36
+
37
+ みれないようなサイトをidentityを使って作成しようと考えています。
38
+
39
+
40
+
41
+ はじめは、
42
+
43
+ Modelsに
44
+
45
+ public class Record
46
+
47
+ {
48
+
49
+ public int Id { get; set; }
50
+
51
+
52
+
53
+ ~中略~
54
+
55
+
56
+
57
+ public string ApplicationUserId { get; set; }
58
+
59
+
60
+
61
+ public virtual ApplicationUser ApplicationUser { get; set; }
62
+
63
+ }
64
+
65
+
66
+
67
+ として、コンテキストは
68
+
69
+ public class RecordContext:DbContext
70
+
71
+ {
72
+
73
+ public DbSet<Record> Records { get; set; }
74
+
75
+ }
76
+
77
+ で作っていたのですが、テストのユーザーを作成して、データを登録してもみてもRecordsテーブルのApplicationUserId はNullのままで、ユーザー識別の役に立ちませんでした。
78
+
79
+
80
+
81
+ ログインして、登校時間などを登録するだけではダメそうなので、登録と同時にコントールで、ApplicationUser からIdを取り出して、RecordsテーブルのApplicationUserIdに登録するのかなと思い、
82
+
83
+ 初めの質問のようにコンテキストの中に
84
+
85
+  public DbSet<ApplicationUser> ApplicationUser { get; set; }
86
+
87
+ を入れて作成しようと思いました。
88
+
89
+ -------------------------------------
90
+
91
+
6
92
 
7
93
 
8
94