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

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

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

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

4339閲覧

ASP.NET MVCでModelにAnnotationをつけたい。

cancat

総合スコア313

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2017/05/22 01:21

こんにちは。
Windows10でASP.NET MVCのアプリケーションを開発しています。
Visual Studio 2017 Communityを使っています。

###前提・実現したいこと
EDMXでGUIでModelを作ると、mydatamodel.edmxの同じ階層にできるmydatamodel.ttに、mydatamodel.tt/User.csのようにModelファイルを自動で生成してくれます。
この

public partial class User { public int Id { get; set; } public string UserId { get; set; }//実体はEmail(cf.username@mailaddress.com)

のUserIdは、実体はEmail(cf.username@mailaddress.com)なので、入力時にvalidationしたいです。
なので、

[EmailAddress] public string UserId { get; set; }//実体はEmail(cf.username@mailaddress.com)

のようにAnnotationをつけたいです。

###試したこと
EDMXでGUIでModelを作る。

###発生している問題・エラーメッセージ
public string UserId { get; set; }//実体はEmail(cf.username@mailaddress.com)
のようにAnnotationをつけたいが、メニューを見つけられない。
.csに手で書くと消える。

###該当のソースコード

C#

1 public partial class User 2 { 3 public int Id { get; set; } 4 public string UserId { get; set; }//実体はEmail(cf.username@mailaddress.com) 5

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.0.26228.9 D15RTWSVC
Microsoft .NET Framework
Version 4.6.01586

です。
よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/05/22 02:31

質問者さんが過去に立てたスレッドが多数放置・放棄状態です。そこをまず何とかしてください。
cancat

2017/05/22 02:47

放置していませんし、放棄もしていません。まえにも同じようなことを回答しました。
退会済みユーザー

退会済みユーザー

2017/05/22 02:55

私に言わせていただければあなたのやっていることはまぎれもなく放置・放棄です。改善をお願いしてもその気はないということのようですが、そうであれば、今後はお互い関わらない方がよさそうですね。
guest

回答1

0

T4テンプレート(mydatamodel.tt)を書き換えるのが簡単だと思います。
開いてみればわかりますが、ほとんどそのままC#のコードなので大体わかると思います。

※追記
ただし、T4はコードを生成するためのテンプレートなので、コード生成プロセスに対する理解が必要です。
一般向けではないみたいでした。

※追記2
T4テンプレートを書き換えるのは大分トリッキーのようです。
もうしませんごめんなさい。

投稿2017/05/22 02:29

編集2017/05/22 07:06
hihijiji

総合スコア4150

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

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

cancat

2017/05/22 02:36

ありがとうございます。 重ねての質問で恐縮です。 よく見たら、mydatamodel.ttとmydatamodel.Context.ttとあって、同じような構造をしていますが、どちらが優先度が高いとかあるのでしょうか? .ttにコードを手で書いて(そのあとに.edmxを編集しても)手で書いたものは保持されるのでしょうか?
退会済みユーザー

退会済みユーザー

2017/05/22 02:43

> T4テンプレート(mydatamodel.tt)を書き換えるのが簡単だと思います。 Visual Studio が自動生成したコードを書き換えるということですか? そういう意味だとすると、自走生成されたソースコードのコメントに "このファイルを手動で変更すると、アプリケーションで予期しない動作が発生する可能性があります。このファイルに対する手動の変更は、コードが再生成されると上書きされます。" と書いてある通り、簡単なのはその通りですが、お勧めできる方法ではないと思うのですが? 自動生成されたコードを書き換えないで済む方法はあるはずです。
cancat

2017/05/22 02:46

おっしゃるとおりで、tt/User.csなどには、「手動で編集するな」という旨の警告があり、GUIでなにかできるのではないかなと考えて質問しました。 すると、**.ttを編集するとよい、とご回答をいただいたので、質問しました。
hihijiji

2017/05/22 03:14

> Visual Studio が自動生成したコードを書き換えるということですか? T4はコードを自動生成するためのテンプレートですので、ちょっと意味合いが違います。 私はT4を時々書き換えちゃってますが、デザイナで中身を大幅に変更しても直接書き換えた部分は残ってます。 しかし、確かに一般的な方法ではなかったかもしれません。
退会済みユーザー

退会済みユーザー

2017/05/22 04:26

hihijiji さん> T4 を書き換えてというのは自分は考えたこともないので、それによってモデルのプロパティにアノテーション属性を付与する方法は分かりませんが、それが可能だとしても 、MSDN などで紹介されている方法の方がはるかに簡単かつ現実的な気がします。
hihijiji

2017/05/22 04:46

SurferOnWww さん レス有難うございます。 T4テンプレートを書き換えるのが一般的では無いとのご指摘、参考にいなりました。 私も、もっと簡単に属性を付け足す方法があるなら教えて欲しいです。
退会済みユーザー

退会済みユーザー

2017/05/22 05:51

hihijiji さん> 以下の TechNet の記事の「Entity Framework でのデータ アノテーション検証コントロールの使用」のセクションに書いてある方法が自分としては簡単かつ現実的だと思っています。 [C#] #21. データ アノテーション検証コントロールでの検証 https://technet.microsoft.com/ja-jp/subscriptions/ff642519.aspx 記事は Visual Studio 2010, EF4 時代の ObjectContext ベースのものですが、Visual Studio 2015, EF6 の DbContext ベースで作られる EDM でも同様なことは可能です。
hihijiji

2017/05/22 07:04

SurferOnWww さん 有難うございます。 ご紹介いただいた方法が、真っ当なやり方みたいですね。
cancat

2017/05/22 07:08

hihijijiさん。コメントありがとうございます。 T4はコードを自動生成するためのテンプレートですので、ちょっと意味合いが違います。 なるほど。 私はT4を時々書き換えちゃってますが、デザイナで中身を大幅に変更しても直接書き換えた部分は残ってます。 なるほど! それなら書き換えする価値ありますね。 しかし、確かに一般的な方法ではなかったかもしれません。 いえいえ、一般的な、というかできればGUIでできそうな気はしますが、まずはできそうなので、とても参考になりました。 とはいえ、ttファイル開いてみてみたのですが、800行もあってちょっと編集するにはげんなりな感じでした。
hihijiji

2017/05/22 07:22

T4を書き換えるにしてもプロパティに対応する属性を何処からか持って来なければならないので、*簡単*は言いすぎでした。
cancat

2017/05/22 07:45

SurferOnWwwさん、情報ありがとうございます。 Entity Framework でのデータ アノテーション検証コントロールの使用 データ モデル クラスの生成を目的として ADO.NET Entity Framework を使用している場合、検証コントロールの属性を直接クラスに適用することはできません。Entity Framework Designer はモデル クラスを生成するため、モデル クラスへの変更点は Designer で変更を行うたびに上書きされてしまいます。 Entity Framework で生成されたクラスで検証コントロールを使用する場合は、メタ データ クラスを作成する必要があります。検証コントロールを実際のクラスに適用する代わりに、メタ データ クラスに適用します。 たとえば、Entity Framework を使用して Movie クラスを作成したとします (図 04 参照)。さらに、Movie Title と Director プロパティを必須プロパティにするとします。この場合、サンプル コード 4 のように、部分クラスとメタ データ クラスを作成することができます。 というところだと思いますが、「メタ データ クラスに適用します。」とあるが、メタ データ クラスとはなにか? 「検証コントロールを実際のクラスに適用する代わりに、メタ データ クラスに適用します。」とはどうやるのか? 「Movie Title と Director プロパティを必須プロパティにするとします。」はどうやるのか? など疑問噴出中です。・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問