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

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

ただいまの
回答率

90.35%

  • VB.NET

    964questions

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

  • SQL Server

    617questions

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

  • Entity Framework

    37questions

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 464

FinalCode

score 2

実現したい事

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

Imports System.Data.Entity

Partial Public Class DbModel
    Inherits DbContext

    Public Sub New()
        MyBase.New("name=DbModel")
    End Sub

    Public Overridable Property T_TRADE As DbSet(Of T_TRADE)

    Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder)
        modelBuilder.Entity(Of T_TRADE)() _
                .Property(Function(e) e.USER_ID) _
                .IsUnicode(False)

        modelBuilder.Entity(Of T_TRADE)() _
                .Property(Function(e) e.USER_NAME) _
                .IsUnicode(False)
    End Sub
End Class

T_TRADE.vb

Imports System.ComponentModel.DataAnnotations
Imports System.ComponentModel.DataAnnotations.Schema

<Table("TEST.T_TRADE")>
Partial Public Class T_TRADE
    <Key>
    Public Property TRADE_NO As Long

    <Required>
    <StringLength(10)>
    Public Property USER_ID As String

    <Required>
    <StringLength(30)>
    Public Property USER_NAME As String

    Public Property TRADE_QUANTITY As Long
End Class

テーブル
T_TRADE構成

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

手順

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • FinalCode

    2018/04/19 13:25 編集

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

    キャンセル

  • SurferOnWww

    2018/04/19 13:44 編集

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

    キャンセル

  • FinalCode

    2018/04/19 13:51

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

    キャンセル

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

同じタグがついた質問を見る

  • VB.NET

    964questions

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

  • SQL Server

    617questions

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

  • Entity Framework

    37questions