Subsonic 3、Simple Repositoryを使用すると、Addは常にPKに対して00000000-0000-0000-0000-000000000000を提供しますが、これは明らかにDBでエラーを引き起こします。Subsonicによって作成されたPKの定義はnewid()を使用していますが、まだこの問題があります。
この問題を抱えている人は他にいますか?
参考までに、App_DataディレクトリにあるローカルSQL Server2005DBを使用しています。
Subsonic 3、Simple Repositoryを使用すると、Addは常にPKに対して00000000-0000-0000-0000-000000000000を提供しますが、これは明らかにDBでエラーを引き起こします。Subsonicによって作成されたPKの定義はnewid()を使用していますが、まだこの問題があります。
この問題を抱えている人は他にいますか?
参考までに、App_DataディレクトリにあるローカルSQL Server2005DBを使用しています。
GuidのSubSonicを使用する場合は、それらを設定する必要があります。最善の策は、コンストラクターのGuid.NewGuid()です。SimpleRepoは「POCOファースト」の考え方であることを忘れないでください。DBは単なるデータの場所です。
また、GUID を PK として使用しています。私のPKのデフォルト設定は...
(CONVERT([uniqueidentifier],CONVERT([binary](6),getdate(),(0))+CONVERT([binary](10),newid(),(0)),(0)))
私は亜音速の音源を調べてきましたが、これは... よくわからないという事実に関連していると思い始めています。
Subsonic が NOT NULL, PK, Default Setting 列を READ ONLY として表示していないことは知っています。
したがって、ソリューションに他の PK データ型がないと仮定すると、Structs.tt ファイルに数行を追加できます...
30 行目の foreach ループを見つけます...
<# foreach(var col in tbl.Columns){#>
Columns.Add(new DatabaseColumn("<#=col.Name#>", this)
{
IsPrimaryKey = <#=col.IsPK.ToString().ToLower()#>,
DataType = DbType.<#=col.DbType.ToString()#>,
IsNullable = <#=col.IsNullable.ToString().ToLower()#>,
AutoIncrement = <#=col.AutoIncrement.ToString().ToLower()#>,
IsForeignKey = <#=col.IsForeignKey.ToString().ToLower()#>
<# if (col.IsPK.ToString().ToLower() == "true"){ #>
, IsReadOnly = <#=col.IsPK.ToString().ToLower()#>
<# } #>
});
追加するセクションは、IsForeignKey の直後の IF ステートメントです。
これにより、デフォルト設定に何かがある限り、PK Guid で機能するはずです。
ただし、DB にある可能性のある他の PK については保証できません。あなたは警告されました。