idカラムがないデータベースファースト時の複合キー設定
2183 ワード
タイトルママ。
テーブルにidカラムが存在しない場合のDBファーストでも
複合キーを好き勝手に設定できるようにする方法。
経緯
Oracle→SQLServer(まだやってる)へのデータ移行での壁その4くらい。
単一キーであれば[Key]アノテーションを付けるだけでいいんだけど、
複合キーになると"InvalidOperationException"でカラム順がないよと怒られる。
その回避策。
対応内容
***.tt(edmx配下Modelに生成される4ファイルのうちの一つ)を以下のように編集
***.tt(line66~)
var simpleProperties = typeMapper.GetSimpleProperties(entity);
if (simpleProperties.Any())
{
int orderNo = 0; //追加
foreach (var edmProperty in simpleProperties)
{
#>
/*追加ここから*/
<# if (ef.IsKey(edmProperty)){ #>
[Key, Column(Order = <#= orderNo.ToString() #>)]
<# orderNo++; #>
<# } #>
/*追加ここまで*/
<#=codeStringGenerator.Property(edmProperty)#>
<#
}
}
***.tt(line415~)
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}using System;{1}" +
"{2}",
inHeader ? Environment.NewLine : "",
(includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "")
+Environment.NewLine +"using System.ComponentModel.DataAnnotations;" //追加
+Environment.NewLine +"using System.ComponentModel.DataAnnotations.Schema;", //追加
inHeader ? "" : Environment.NewLine)
: "";
}
なにやってんのこれ?
各種出力されるフォーマットにちょっと手を加えている。
上はPKに[Key Column(Order = n)]アノテーションを付属させるため。
下はusingを2種追加。上記2種のアノテーションを使うため。
なので極論としては下は省いて上の変更にクラス参照をきちんと記述してやるのでもよい。
見栄えはともかく。
Author And Source
この問題について(idカラムがないデータベースファースト時の複合キー設定), 我々は、より多くの情報をここで見つけました https://qiita.com/so_nkbys/items/56a3cf51bc3ba605152f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .