0

Subsonic 3、Simple Repositoryを使用すると、Addは常にPKに対して00000000-0000-0000-0000-000000000000を提供しますが、これは明らかにDBでエラーを引き起こします。Subsonicによって作成されたPKの定義はnewid()を使用していますが、まだこの問題があります。

この問題を抱えている人は他にいますか?

参考までに、App_DataディレクトリにあるローカルSQL Server2005DBを使用しています。

4

2 に答える 2

1

GuidのSubSonicを使用する場合は、それらを設定する必要があります。最善の策は、コンストラクターのGuid.NewGuid()です。SimpleRepoは「POCOファースト」の考え方であることを忘れないでください。DBは単なるデータの場所です。

于 2009-10-26T00:09:39.973 に答える
1

また、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 については保証できません。あなたは警告されました。

于 2009-10-25T22:41:29.537 に答える