Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orchard:SQL Server 2012中未保存一个属性值_Sql_Asp.net Mvc_Asp.net Mvc 4_Orchardcms_Sql Server 2012 - Fatal编程技术网

Orchard:SQL Server 2012中未保存一个属性值

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(

在Orchard中,我有一个名为
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
,你可以看到它有所有的属性名称,exept
DateAdded
!因此,我进一步查看了最后生成的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()
    方法做任何更改
  • 我没有更改我的
    机器记录
  • 我没有改变我的数据库表
结论:与插入值无关的内容没有改变,所以可能是因为我重新构建了解决方案,或者是因为我重新启动了VS


对不起,我希望我知道是什么造成的。。。但问题解决了@伊万·费里奇非常感谢您抽出时间

哦,忘了发了,但是是的,我发了,你可以在我更新的问题中看到。无论如何谢谢你!需要澄清的是,您是刚刚用添加的列更改了
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;
}