Orchard:SQL Server 2012中未保存一个属性值
在Orchard中,我有一个名为Orchard:SQL Server 2012中未保存一个属性值,sql,asp.net-mvc,asp.net-mvc-4,orchardcms,sql-server-2012,Sql,Asp.net Mvc,Asp.net Mvc 4,Orchardcms,Sql Server 2012,在Orchard中,我有一个名为MachineRecord的模型,其中包含一些属性,所有属性都工作正常,但现在我添加了一个属性,DateAdded,当我向数据库添加一些示例数据时,所有值都被发布,除了我后来添加的属性 MachinereRecord.cs 正如我所说,我在这里添加了一些sampledata,在添加该属性之前,一切都很好 public void AddItems() { GroupRecord groupRecord = new GroupRecord(
MachineRecord
的模型,其中包含一些属性,所有属性都工作正常,但现在我添加了一个属性,DateAdded
,当我向数据库添加一些示例数据时,所有值都被发布,除了我后来添加的属性
MachinereRecord.cs
正如我所说,我在这里添加了一些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);
}
所以我进入了代码,最后我找到了一个出错的方法,因为我们可以看到值和属性实际上在实体中,所以这没关系,但是当我查看其他参数时,比如propertyNames
,你可以看到它有所有的属性名称,exeptDateAdded
!因此,我进一步查看了最后生成的SQL查询,该属性不在其中,因此数据库单元格中填充了NULL
我确保db列的数据类型为datetime
,并删除了mappings.bin,这样NHibernate将再次缓存所有属性,但没有结果
编辑:
忘记发布我的migrations.cs
迁移.cs
公共类迁移:DataMigrationImpl
{
公共int创建()
{
CreateTable(“MachineRecord”,table=>table
.Column(“Id”,c=>c.PrimaryKey().Identity())
.列(“GroupRecord_Id”)
.Column(“MachineNumber”,c=>c.NotNull())
.Column(“Title”,c=>c.NotNull(),带长度(40))
.列(“说明1”,c=>c.WithLength(70))
.列(“说明2”,c=>c.WithLength(70))
.列(“说明3”,c=>c.WithLength(70))
.列(“说明4”,c=>c.WithLength(70))
.列(“说明5”,c=>c.带长度(70))
.列(“说明6”,c=>c.WithLength(70))
.列(“SerialNumber”,c=>c.WithLength(6))
.Column(“PriceType”,c=>c.NotNull())
.Column(“Price”,c=>c.NotNull())
.列(“年”,c=>c.WithLength(4))
.Column(“DateAdded”,c=>c.WithType(DbType.DateTime))
);
CreateTable(“GroupRecord”,table=>table
.Column(“Id”,c=>c.PrimaryKey().Identity())
.栏(“名称”)
);
返回1;
}
}
有人知道如何解决这个问题吗?提前谢谢 您是否修改了迁移文件以将
DateAdded
列附加到数据库中?如果您不这样做,Orchard将无法识别它应该映射到您的machinereRecord
属性的内容
编辑: 如果您正在修改类结构,那么这些更改应该在迁移中的不同函数中进行,而不是在
Create()
方法中进行
在您的情况下,应该从Create
方法中删除DateAdded
列,并添加以下函数:
public int UpdateFrom1()
{
SchemaBuilder.AlterTable("MachineRecord",
table => table.AddColumn<DateTime>("DateAdded"));
return 2;
}
public int UpdateFrom1()
{
SchemaBuilder.AlterTable(“MachineRecord”,
table=>table.AddColumn(“DateAdded”);
返回2;
}
好的,它现在正在运行,但我真的不知道我改变了什么,因为我只是想在等待答案的同时继续一些设计任务,我只是移动了一些div没什么特别的,然后我检查了我的db表,我看到了其中的日期
所以对于来这里的人,我可以提一些我确信我没有做的事情
- 我没有再次运行迁移
- 我没有对我的
方法做任何更改AddItems()
- 我没有更改我的
机器记录
- 我没有改变我的数据库表
对不起,我希望我知道是什么造成的。。。但问题解决了@伊万·费里奇非常感谢您抽出时间 哦,忘了发了,但是是的,我发了,你可以在我更新的问题中看到。无论如何谢谢你!需要澄清的是,您是刚刚用添加的列更改了
Create
函数,还是以前就有?如果您要更改迁移,则必须始终更改新函数中的表,因为Orchard不会选择它。在这种情况下,您应该在迁移内部创建一个名为UpdateFrom1()
的新函数,它应该通过添加新列来更改现有表,并以return 2结束
指示您的迁移现在是版本2。您甚至可以检查名为[ModuleName]\u MachineRecord
的数据库表,查看列是否已创建,我知道,所做的只是删除数据迁移
表中的现有表和规则,然后再次运行迁移。我非常确定这不是问题所在,因为我在开始工作后做了100次。我为什么要这么做?因为我一直在测试东西,我不想在那里有30个UpdateFrom()
方法。所以当我完成这个模块的开发时,我只有一两种方法。我非常确定该列确实在那里,并且它是正确的数据类型,正如您所看到的,无论如何,谢谢您的帮助!映射缓存在app_数据文件夹的mappings.bin中。因此,如果应用程序池没有回收,则需要删除该文件以触发映射的更改。不管怎么说,这在过去对我很有效。
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;
}
}
public int UpdateFrom1()
{
SchemaBuilder.AlterTable("MachineRecord",
table => table.AddColumn<DateTime>("DateAdded"));
return 2;
}