2

在 Orchard 中,我有一个模型调用MachineRecord了一些属性并且一切正常,但现在我添加了一个属性,DateAdded当我向数据库添加一些示例数据时,所有值都被发布,除了我后来添加的属性。

机器记录.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 Query,该属性不在其中,因此数据库单元格中填充了NULL.

我确保 db 列的数据类型是datetime,并且我删除了 mappings.bin 以便 NHibernate 会再次缓存所有属性,但没有结果。

编辑:

忘记发布我的 migrations.cs。

迁移.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

您是否修改了迁移文件以将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 回答
1

好的,它现在可以工作了,但我真的不知道我改变了什么,因为我只是想在等待一些答案的同时继续一些设计任务,我只是移动了一些 div 没什么特别的,然后我检查了我的数据库表,我看到日期在里面!

所以对于那些也来这里的人,我可以提一些我确信我没有做过的事情......

  • 我没有再次运行迁移
  • 我没有改变我的AddItems()方法
  • 我没有改变我的MachineRecord
  • 我没有改变我的数据库表

结论:与插入该值相关的任何内容都没有改变,所以可能是因为我重建了我的解决方案(再次)或者因为我重新启动了 VS ...

对不起,我希望我知道是怎么回事......但它已经解决了。@Ivan Feric 非常感谢您抽出宝贵时间!

于 2012-12-08T13:15:41.547 回答