1


0

SubSonicを試してみて、制作プロジェクトで使用できるかどうかを確認しています。 新しい列が作成されたときに、データベースをデフォルト値(StringおよびDateTime)で更新することに関する問題に遭遇したようです。

DateTimeまたはStringの新しいプロパティがオブジェクトに追加された場合

パブリッククラスBug {public int BugId {get;}セット;パブリック文字列Title {get;}セット;パブリック文字列概要{get;}セット;パブリックDateTime TrackedDate {get;セット; public DateTime RemovedDate {get;};セット; }}

そのタイプのオブジェクトをデータベースに追加するコードが実行されたとき

var repository = new SimpleRepository(SimpleRepositoryOptions.RunMigrations);

repository.Add(new Bug(){タイトル= "バグ"、概要= "概要"、TrackedDate = DateTime.Now});

次のSQLを作成します。

アップデートのバグSET RemovedDate = '' 01/01/1900 00:00:00 ''

何らかの理由で、文字列またはDateTimeの両端に二重引用符を2つ追加しています。

これにより、次のエラーが発生します。

_ System.Data.SqlClient.SqlException - 「01」の近くに誤った構文

SQL Server 2005に接続しています

この問題とは別に、SubSonicが素晴らしい製品であることに気付いたので、どんな助けでも不安に思うでしょう。

'' '' '

私は私のエラーのスクリーンキャストを作成しました ここ

3 Answer


5


これはバグであり、二重引用符は数回転前に導入されました。 私はかなりこれが> 3.0.0.3に修正されたと確信しているので、あなたが現在の低下をつかみたいのであれば、それは対処されるべきです。

混乱して申し訳ありませんが、ご存知のとおり、createに値を設定することができ、これによって問題が解決します。 さらに、andymeadowsが示唆していることを行うことができ、これはフィールドをnullにすることを可能にします(おそらくより正確です)。

とにかく - すぐにこれを直すでしょう:)。 仕事を見つけようとしていますが、ブランチのマージに費やすサイクルが多すぎません:(


1


RemovedDateのタイプを DateTime`から DateTime`に変更してみてください。

パブリッククラスBug {public int BugId {get;}セット;パブリック文字列Title {get;}セット;パブリック文字列概要{get;}セット;パブリックDateTime TrackedDate {get;セット;公開日時? RemovedDate {get;セット; }}


1


これは間違いなくバグのようです。そのUPDATEステートメントにWHERE句があるかどうかはわかりませんが、そうでない場合はそれ以上のものです。 問題として再現するためのテストケースを付けて githubに報告してください。 当面の間は、RemovedDateの値をコードで設定することでこれを回避できます。

repository.Add(new Bug(){Title = "A Bug"、Overview = "An Overview"、TrackedDate = DateTime.Now RemovedDate = DateTime.Now //ここでは必要に応じて設定してください)