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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

SQL Server

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

0回答

3078閲覧

EntityFramework使用時、SQLSERVERのDEFAULTを使用するには

FinalCode

総合スコア8

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

SQL Server

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/04/18 05:21

編集2022/01/12 10:55

実現したい事

insert時、テーブルのカラムに設定したDEFAULT値を反映させる
下記手順VBコードで.TRADE_QUANTITY = 1と書かなくてもT_TRADEのTRADE_QUANTITYにカラムのDEFAULT値である1が挿入される

環境

VisualStudio2017 15.5.2
SQLServer2017
ASP.NET Web Forms
VB.NET
EntityFramework6.2.0

用意コード

DbModel.vb

VB.NET

1Imports System.Data.Entity 2 3Partial Public Class DbModel 4 Inherits DbContext 5 6 Public Sub New() 7 MyBase.New("name=DbModel") 8 End Sub 9 10 Public Overridable Property T_TRADE As DbSet(Of T_TRADE) 11 12 Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder) 13 modelBuilder.Entity(Of T_TRADE)() _ 14 .Property(Function(e) e.USER_ID) _ 15 .IsUnicode(False) 16 17 modelBuilder.Entity(Of T_TRADE)() _ 18 .Property(Function(e) e.USER_NAME) _ 19 .IsUnicode(False) 20 End Sub 21End Class

T_TRADE.vb

VB.NET

1Imports System.ComponentModel.DataAnnotations 2Imports System.ComponentModel.DataAnnotations.Schema 3 4<Table("TEST.T_TRADE")> 5Partial Public Class T_TRADE 6 <Key> 7 Public Property TRADE_NO As Long 8 9 <Required> 10 <StringLength(10)> 11 Public Property USER_ID As String 12 13 <Required> 14 <StringLength(30)> 15 Public Property USER_NAME As String 16 17 Public Property TRADE_QUANTITY As Long 18End Class

テーブル
T_TRADE構成

SQL

1CREATE TABLE [TEST].[T_TRADE] ( 2 [TRADE_NO] BIGINT IDENTITY (1, 1) NOT NULL, 3 [USER_ID] VARCHAR (10) NOT NULL, 4 [USER_NAME] VARCHAR (30) NOT NULL, 5 [TRADE_QUANTITY] BIGINT CONSTRAINT [DF_T_TRADE_ESTIMATES_QUANTITY] DEFAULT ((1)) NOT NULL, 6 CONSTRAINT [PK_T_TRADE] PRIMARY KEY CLUSTERED ([TRADE_NO] ASC) 7);

手順

イメージ説明
イメージ説明
ADO.NET Entity Data Modelを作成→データベースからCode First選択して作成

下記VBコードにてinsert処理を行う

VB.NET

1Using context = New DbModel 2 context.T_TRADE.Add(New T_TRADE With { 3 .USER_ID = 1, 4 .USER_NAME = "山田"}) 5 context.SaveChanges() 6End Using

結果 T_TRADE
TRADE_NO 1
USER_ID 1
USER_ID 山田
TRADE_QUANTITY 0 ←ここが1になって欲しい

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/04/18 06:17

何を作っているかぐらいは書いてください。ASP.NET と言っても Web Forms, MVC, Web Pages, Web API などいろいろあります。あと、.NET のバージョン、MVC ならそのバージョンも書いてください。
FinalCode

2018/04/18 06:22

指摘事項追加させて頂きました。よろしくお願いします。
退会済みユーザー

退会済みユーザー

2018/04/18 06:23 編集

すみません、質問をよく見てみれば ASP.NET は特に関係なく、Entity Framework の話のように見えます。であれば、ASP.NET のタグは外して、その旨書いていただければと思います。その際、ついでに Code First の基になったコードも書いていただければと思います。
退会済みユーザー

退会済みユーザー

2018/04/18 10:58

TRADE_QUANTITY 列に DEFAULT を設定する VB.NET のコードはどれでしょう?
退会済みユーザー

退会済みユーザー

2018/04/18 12:58 編集

Code First のコードが不明でしたので、質問にアップされていた CREATE クエリで DB を作って、それから DB First で EDM を作って試してみました。結果、質問者さんの問題を再現できました・・・が、理由は今のところ不明です。明日また考えてみます。どうも long の初期値 0 が渡されているような感じです。VB.NET のコードで、プロパティ TRADE_QUANTITY にデフォルト値を 1 に設定すれば問題は回避できると思いますが、そうすると DB のテーブルの TRADE_QUANTITY 列に DEFAULT 値 1 を設定する必要はないし・・・
FinalCode

2018/04/19 00:19

Entity Frameworkの知識が乏しくCode Firstの基になったコードが何を指しているのか分からず生み出されたソースを追記してしまいました。DBから自動生成では無くなりますが、T_TRADE.vbのTRADE_QUANTITYの属性に初期値を設定する物があればとりあえずの解決はできそうですが見当たらず四苦八苦しております。引き続きこちらも模索してみます。ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/04/19 01:33

> Entity Frameworkの知識が乏しくCode Firstの基になったコードが何を指しているのか分からず ← 分からないって、ご自分で書いたコードではないのですか? 質問者さんはどういう立場の人なのでしょう? 上司とか先輩に調べてこいとか言われてここで質問しているのですか? もしそうなら、コードを書いた人にここで質問していただければと思うのですが・・・
FinalCode

2018/04/19 01:36

いえ自分は開発者で自分で書いたコードですがEntity Framework部分はGUI操作にてDBからソースコードを自動生成しております。何か勘違いしていたらすみません。
退会済みユーザー

退会済みユーザー

2018/04/19 02:04

> DBからソースコードを自動生成 ← 質問には「Code First選択」と書いてありました。どうも DB First のように思えますが、どっちなんですか??? 開発者なら用語は正確にお願いします。
FinalCode

2018/04/19 02:21 編集

手順に書いてあります通りADO.NET Entity Data Modelを作成→データベースからCode First選択して作成 が正です。 DBからソースを自動生成してると思ったのですが違いますでしょうか。 手元本には「既存のデータベースからソースコードを生成する方法」という所に掲載されていた為「DBからソースコードを自動生成」という文言を使用致しました。
退会済みユーザー

退会済みユーザー

2018/04/19 02:40

既存の DB があって、それをベースに Visual Studio の機能を利用して Entity Data Model (.edmx ファイル他)を作っているなら、それは Code First とは言いません。そうであれば、Code First という言葉は使ってはいけません。
退会済みユーザー

退会済みユーザー

2018/04/19 02:47

レスを返す前に、Code First でググって調べるぐらいのことはしていただいているでしょうか?
FinalCode

2018/04/19 02:50 編集

「Code First」という言葉はVisualStudio手順の説明でしか使用しておりません。あくまでVisualStudioの手順での文言となります。 念の為画面操作の画像を添付させて頂きました。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/04/19 03:10

それ間違ってます。Code First(ググって意味は理解しましたか?)で DB / テーブルを生成するために使うベースとなる Code を生成するためのものです。DB First で既存の DB を使う場合は[データベースから EF Designer]を選んで、Entity Data Model (.edmx ファイル他)を作り、それを使います。今さらそんな話をしないで済むようにお願いします。
FinalCode

2018/04/19 04:27 編集

手元にある参考書ではEntityFramework4以前はDBをEntityへ関連付ける際はEDMを使用しないとソースコードで直接対応付けできなかったが、現在はデータベース上の要素をソースコードで直接マッピングする事ができるようになった為EDMは不要となっており、既存DBにEntityFrameworkを用いてアクセスする場合は既存DBのDB定義を読み込み対応するEntity定義を生成する機能である、上記手順を用いて生成するとなっております。又、今回の場合CodeからDBに定義を反映する事は無く、あくまでもEntityFrameworkを用いて既存DBにアクセスする事を目的としております。その上での質問となります。至らない点はあるとは思いますがよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/04/19 04:45 編集

では「参考書」でどうぞ。もし制約などがあると、その辺りの副作用は自分は知りませんので、お役にたてないです。
FinalCode

2018/04/19 04:51

ありがとうございました。念の為「データベースからCode First」で検索を行いましたが概ね上記で認識はずれておりませんでした。とりあえずの解決策としましては各EntityClassにコンストラクタを追加して臨時的に対応しております。ただDB更新の度自動生成している為不便となりますが..。他に回避方法やスマートなDEFAULTの適応方法があれば回答よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問