こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ASP.NET MVC エンティティモデルの定義

ASP.NET MVC コードファーストでの質問です。

エンティティモデルを定義する際、実際のテーブル構造と異なるモデルを
定義することは可能でしょうか?

Imports System.ComponentModel.DataAnnotations

Public Class SampleData
Public Property Height As Long //実際に存在するカラム
<Column("Taiju")> _
Public Property Weight As Long //実際に存在しないカラム(ただし「Taiju」というカラムが存在する)
Public Property Bmi As Long //実際に存在しないカラム
End Class

カラム名が違う場合(上記Weight)、Column属性を指定すれば、指定カラムからデータを取得してくれます。
実際に存在しないカラム(上記Bmi)を定義した場合、このままですとデータ取得時に
「System.Data.SqlClient.SqlException: 列名 'Bmi' が無効です。」となります。
データ取得時にBmiを取得対象外としたいのですが、そのようなことは可能でしょうか?
BmiをPrivate変数としてgetter./setter用Functionを定義すれば回避は可能なのですが、
スマートではないので、属性の指定等で対応できればと考えております。

投稿日時 - 2011-06-29 11:18:23

QNo.6842627

困ってます

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

NotMappedAttribute かな。

あと、BMIは計算して表示するクラスでしょうから、setプロパティなしでgetプロパティだけを定義して、そのなかで身長、体重から計算して値を表示しておけばこの場合はDBからのデータ取得は行われないと思います。

http://blogonos.wordpress.com/2011/06/12/mvcconf-japan-%e3%81%b5%e3%82%8a%e3%81%8b%e3%81%88%e3%82%8a-1%ef%bc%9a-mvc3-codefirst-%e3%83%87%e3%83%a2/

ここで提示しているサンプルの中で年齢の項目はそんな感じで扱ってます。

投稿日時 - 2011-06-29 13:01:39

お礼

<NotMapped()>
Public Property Bmi As Long

こちらの記載で問題ないことを確認しました。

なお
http://www.atmarkit.co.jp/fdotnet/aspnetmvc3/aspnetmvc3_03/aspnetmvc3_03_01.html
「プロパティは、同名のテーブル列にマッピングされる」
とのことで、例示いただいた「Readonlyのプロパティとする」方法の他、
Public Bmi As Long
とPublicな変数として定義してしまうことでも回避はできそうです
(これはこれで扱いが面倒ですが)。

ありがとうございました。

投稿日時 - 2011-06-29 15:22:05

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問