質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

2回答

936閲覧

ASP.NET MVC5, DBに1つの型(クラス)から複数のテーブルを作成する方法

blackdifferent

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2018/12/12 01:10

編集2019/01/08 01:47

こんにちわ。
ASP.NET FRAMEWORK(VisualStudio2017)でWeb勤務表を作成しています。
新しい月になる毎に、ユーザー操作でデータベース(SQLEXPRESS2008)に勤務データテーブルを作成したいのですが、同じフォーマット(Kintaiクラス)のテーブルを複数作成する方法が分かりません。
ネットで見つけたサンプル(https://qiita.com/tanaka5750/items/b2b4a0d6e60539c401ea)よりコードファーストでDBにテーブルを作れることは確認したのですが、これでは1つのクラスから1つのテーブルしか作成できませんし、ユーザー操作でテーブルを作ることも出来ません。どのようにしたらいいのか全くわからないので、考え方やどういった処理を書いたら良いのかというところを教えていただけると嬉しいです。
一応モデルのコードを載せておきます。

Kintai.cs

using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication3.Models { public class Kintai { public int id { get; set; } public string week { get; set; } public Nullable<System.TimeSpan> open { get; set; } public Nullable<System.TimeSpan> close { get; set; } public Nullable<System.TimeSpan> worktime { get; set; } public Nullable<System.TimeSpan> overtime { get; set; } public Nullable<System.TimeSpan> rest { get; set; } public int situation { get; set; } public string remark { get; set; } } }

KintaiModel.cs

namespace WebApplication3.Models { using System; using System.Data.Entity; using System.Linq; public class KintaiModel : DbContext { // コンテキストは、アプリケーションの構成ファイル (App.config または Web.config) から 'KintaiModel' // 接続文字列を使用するように構成されています。既定では、この接続文字列は LocalDb インスタンス上 // の 'WebApplication3.Models.KintaiModel' データベースを対象としています。 // // 別のデータベースとデータベース プロバイダーまたはそのいずれかを対象とする場合は、 // アプリケーション構成ファイルで 'KintaiModel' 接続文字列を変更してください。 public KintaiModel() : base("name=KintaiModel") { } // モデルに含めるエンティティ型ごとに DbSet を追加します。Code First モデルの構成および使用の // 詳細については、http://go.microsoft.com/fwlink/?LinkId=390109 を参照してください。 // public virtual DbSet<MyEntity> MyEntities { get; set; } public virtual DbSet<Kintai> Kintais { get; set; } } //public class MyEntity //{ // public int Id { get; set; } // public string Name { get; set; } //} }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

前のスレッド https://teratail.com/questions/162436 にあった勤怠情報を表示・管理する ASP.NET MVC アプリを作っていて、その話の続きですよね。

で、元になるユーザー情報を SQL Server に格納しているが、月別にテーブルを作成したい。しかも、それを新しい月になるたびに、ASP.NET MVC アプリをユーザーが操作することにより動的に行いたい。そのために EF Code First を考えた・・・ということと理解しています。

理解が違っていたら、どこがどのように違うのか指摘してください。

私の理解が合っているとすると、「月別にテーブルを作成」とか「動的に行いたい」という考え方は普通ではないです。

はっきり言わせていただければ、全くの見当違い(間違っていると言っても良いかも)と思います。

Kintai テーブルに「月」フィールドを追加して、それを使うことをお勧めします。

ところで、管理対象のユーザーは複数いると思いますが、そこはどうするのですか。まさか、ユーザー別にテーブルを作るわけではないですよね。それも Kintai テーブルに「ユーザー」フィールドを追加して、それを使うようにせざるを得ないと思うのですが。

投稿2018/12/12 02:26

編集2018/12/12 02:27
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

blackdifferent

2018/12/12 02:38

そうです。 https://teratail.com/questions/162436 の続きです。 あまりデータベースも扱ったこともないので、不適切な設計をしているかもしれませんので、そういった指摘も歓迎です。 元々はユーザーごと、月ごとにテーブルを作ったほうが整理されて良いかと考えていたのですが、1つのテーブルで「月」「ユーザー」フィールドを指定して管理したほうが良いということでしょうか?
退会済みユーザー

退会済みユーザー

2018/12/12 02:42

> 1つのテーブルで「月」「ユーザー」フィールドを指定して管理したほうが良いということでしょうか? もちろん 100% 絶対に間違いなくそうです。
blackdifferent

2018/12/12 03:54

了解です。 ちなみにフィールドの追加はどのように行うのでしょうか? 何か参考になるサイト等ありましたら、教えていただけますでしょうか。
退会済みユーザー

退会済みユーザー

2018/12/12 04:04

> ちなみにフィールドの追加はどのように行うのでしょうか? SQL Server の既存のテーブルにですか? であれば SQL Server Management Studio を接続して当該テーブルの列を右クリックして、表示されるメニューで[新しい列(N)...]をクリックして作業を進めれば良いと思います。
blackdifferent

2018/12/12 04:32

なるほど。日付(月)とユーザー情報の列を追加して、それらでソートするわけですね。 (フィールドが)なにかグループ分けをする機能なのかと勘違いしてました。
sazi

2018/12/13 01:54

年は不要なんですか?1年ごとにリサイクルして使用する方が面倒な気がするんですが
blackdifferent

2018/12/13 02:08

年も必要でした。 月でなく年月でソート出来るよう、現在取り組んでいます。
blackdifferent

2018/12/13 08:35

LINQ to Entitiesを使ってテーブルの必要なデータの編集や新規追加が出来ました。 一応形にはなりそうなので、これにて解決としたいと思います。ありがとうございました。
guest

0

年月ごとにテーブルを作るのなら、テーブルと対であるモデルも増やす必要がありますよね。
モデルに年月の項目を追加すれば一つのモデルとして扱えるのではないでしょうか。

投稿2018/12/12 01:52

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問