2012-12-08 33 views
2

在Orchard中,我有一个名为MachineRecord的模型,它具有一些属性,并且都运行正常,但现在我添加了一个属性DateAdded,并且当我向db中添加一些示例数据时,所有的值都被发布,豁免我后来添加的属性。Orchard:一个属性值不保存在SQL Server 2012中

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; } 
    } 

这里是我添加一些的sampleData,我补充说,财产一切工作得很好了。

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); 
} 

于是我走进代码,最后我来到一处不顺心的事,因为我们可以看到here的价值和属性实际上是在实体的方法,所以这是好的,但是当我看看在其他参数上,如propertyNames,您可以看到here它具有所有属性名称,exept DateAdded!因此,我进一步查看了最后生成的SQL查询,该属性不在那里,因此数据库单元格已填充为NULL

我确定db列的数据类型是datetime,我删除了mappings.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; 
    } 
    } 

有谁知道如何解决这一问题?提前致谢!

回答

1

OK,它的工作了,但我真的不知道我变了,因为我当我在等待一些答案时,我以为我会继续进行一些设计任务,我只是移动了一些div,没有什么特别的,然后我检查了我的db表,我看到了日期!

因此,对于那些也来到这里的sombody,我可以提一些我确信我没做的事情......

  • 我没有运行迁移再次
  • 我并没有什么改变我的AddItems()方法
  • 我没有改变我的MachineRecord
  • 我没有改变我的db表

结论:没有相关的插入,价值观改变了,所以也许这是因为我重建我的解决方案(再次),或者因为我重新启动VS ...

对不起,我希望我知道它是什么......但它解决了。 @Ivan Feric非常感谢你的时间!

+1

映射缓存在app_data文件夹中的mappings.bin中。因此,如果应用程序池尚未回收,则需要删除该文件以触发映射更改。无论如何,这对我来说都是有效的。 –

1

您是否修改了迁移文件以将DateAdded列添加到数据库中?如果你没有,果园就无法与它应该映射您MachineRecord属性认识..


编辑:

如果你做你的类结构的修改,这些修改应该在你的迁移中有不同的功能,而不是在Create()方法中。

在你的情况,你应该从你Create方法去除DateAdded列,并添加以下功能:

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

    return 2; 
} 
+0

哦,忘记发布了,但是,我做过了,正如您在更新后的问题中所看到的。不管怎么说,还是要谢谢你! – avb

+0

为了清楚起见,您是否刚刚更改了添加列的'创建'功能,或者之前有过吗?如果你正在改变迁移,你总是必须改变新功能中的表格,因为Orchard不会选择它。在这种情况下,您应该在名为'UpdateFrom1()'的迁移中创建一个新函数,并且它应该通过添加新列并以'return 2;'结束来更改现有表,以表明您的迁移现在是版本2.你甚至可以使用名称'[ModuleName] _MachineRecord'来检查你的数据库表,看看是否创建了列 –

+0

我用适当的语法更新了答案,以更改表格。 –

相关问题