2

MachineRecordOrchardでは、いくつかのプロパティで呼び出されたモデルがあり、すべて正常に機能しましたが、1つのプロパティDateAddedを追加し、サンプルデータをデータベースに追加すると、後で追加したプロパティを除いて、すべての値が投稿されます。

MachineRecord.cs

  public class MachineRecord
  {
    public virtual int Id { get; set; }
    public virtual GroupRecord GroupRecord { get; set; }
    public virtual int MachineNumber { get; set; }
    public virtual string Title { get; set; }
    public virtual string Description1 { get; set; }
    public virtual string Description2 { get; set; }
    public virtual string Description3 { get; set; }
    public virtual string Description4 { get; set; }
    public virtual string Description5 { get; set; }
    public virtual string Description6 { get; set; }
    public virtual int SerialNumber { get; set; }
    public virtual string PriceType { get; set; }
    public virtual decimal Price { get; set; }
    public virtual int Year { get; set; }
    public virtual DateTime DateAdded { get; set; }
  }

ここで、私が言ったように、いくつかのサンプルデータを追加します。そのプロパティを追加する前に、すべて正常に機能しました。

    public void AddItems()
    {
      GroupRecord groupRecord = new GroupRecord()
      {
        Name = "Grondbewerking"
      };
      groupRepository.Create(groupRecord);

      MachineRecord machineRecord = new MachineRecord()
      {
        GroupRecord = groupRecord,
        Title = "Hassia zaaimachine",
        MachineNumber = 100000,
        Description1 = "25 Pijpen",
        Description2 = "Traploos",
        Description3 = "Mech. markeurs",
        Description4 = "Max. 30 pijpen",
        Description5 = "+ na egje",
        Description6 = "Ongecontroleerd",
        SerialNumber = 100001,
        Price = 1600.00m,
        PriceType = "Marge",
        Year = 2005,
        DateAdded = new DateTime(2012, 11, 9)
      };
      machineRepository.Create(machineRecord);
}

それでコードに足を踏み入れ、最終的に何かがうまくいかないメソッドにたどり着きました。ここで値と​​プロパティが実際にエンティティにあることがわかります。それで問題ありませんが、他のパラメータを見るとpropertyNames、あなたはここでそれがすべてのプロパティ名を持っているのを見ることができます、例外DateAdded!そこで、最後に生成されたSQLクエリをさらに調べましたが、プロパティはそこにないため、データベースセルはで埋められていNULLます。

db列のデータ型がであることを確認し、datetimemappings.binを削除して、NHibernateがすべてのプロパティを再度キャッシュするようにしましたが、結果はありませんでした。

編集:

私のmigrations.csを投稿するのを忘れました。

Migrations.cs

  public class Migrations : DataMigrationImpl
  {
    public int Create()
    {
      SchemaBuilder.CreateTable("MachineRecord", table => table
        .Column<int>("Id", c => c.PrimaryKey().Identity())
        .Column<int>("GroupRecord_Id")
        .Column<int>("MachineNumber", c => c.NotNull())
        .Column<string>("Title", c => c.NotNull().WithLength(40))
        .Column<string>("Description1", c => c.WithLength(70))
        .Column<string>("Description2", c => c.WithLength(70))
        .Column<string>("Description3", c => c.WithLength(70))
        .Column<string>("Description4", c => c.WithLength(70))
        .Column<string>("Description5", c => c.WithLength(70))
        .Column<string>("Description6", c => c.WithLength(70))
        .Column<string>("SerialNumber", c => c.WithLength(6))
        .Column<string>("PriceType", c => c.NotNull())
        .Column<decimal>("Price", c => c.NotNull())
        .Column<int>("Year", c => c.WithLength(4))
        .Column<DateTime>("DateAdded", c => c.WithType(DbType.DateTime))
      );

      SchemaBuilder.CreateTable("GroupRecord", table => table
        .Column<int>("Id", c => c.PrimaryKey().Identity())
        .Column<string>("Name")
      );

      return 1;
    }
  }

誰かがこれを修正する方法を知っていますか?前もって感謝します!

4

2 に答える 2

1

OK、現在は機能していますが、何を変更したのか本当にわかりません。答えを待っている間にいくつかの設計タスクに移ろうと思っただけなので、特別なことは何もないdivをいくつか移動しただけで、データベースをチェックしましたテーブルと私は日付がその中にあるのを見ました!

だから、ここに来た誰かのために、私がしなかったと確信しているいくつかのことを言及することができます...

  • 移行を再度実行しませんでした
  • AddItems()私は私の方法に何も変更しませんでした
  • 私は変更しませんでしたMachineRecord
  • 私は自分のデータベーステーブルを変更しませんでした

結論:その値の挿入に関連するものは何も変更されていないため、ソリューションを(再度)再構築したか、VSを再起動したためかもしれません...

申し訳ありませんが、何が原因か知りたいのですが...解決しました。@Ivan Fericお時間をありがとうございました!

于 2012-12-08T13:15:41.547 に答える
1

移行ファイルを変更して、DateAdded列をデータベースに追加しましたか? そうしないと、Orchard は、MachineRecordプロパティをマッピングする必要があるものを認識できません..


編集:

Create()クラス構造の変更を行っている場合、それらの変更は、メソッドではなく、移行内の別の関数にある必要があります。

あなたの場合、メソッドDateAddedから列を削除しCreate、次の関数を追加する必要があります。

public int UpdateFrom1()
{
    SchemaBuilder.AlterTable("MachineRecord",
            table => table.AddColumn<DateTime>("DateAdded"));

    return 2;
}
于 2012-12-08T11:56:06.023 に答える