문제

I'm still fairly new to OrchardCMS development and I was able to create a table and a few columns using the Migrations.cs file. Shortly after the new table and columns were created, it dawned on me that I actually needed a couple more columns added to the same table.

For my initial Migrations.cs, I have something similar to below (irrelevant parts of code not shown for brevity):

// some code above
SchemaBuilder.CreateTable("ProductPartRecord", table => table
    .ContentPartRecord()
    .Column<decimal>("UnitPrice")
    .Column<string>("Sku", column => column.WithLength(50))
    );
return 1;
// some code below

To add additional column(s), I would need to create a class as follows based on my limited knowledge:

public int UpdateFrom1()
{
    SchemaBuilder.AlterTable("ProductPartRecord", table => table
        .AddColumn<string>("UnitColor", c => c.Nullable())
    );
    return 2;
}

But, here comes the question: Why couldn't I simply modify the initial CreateTable method by inserting something like: .Column<string>("UnitColor") instead of creating the UpdateFrom1() class?

Furthermore, let's say the software requirement changes later and now I need to add yet another column to the same table. Would I then create yet another class? (e.g., UpdateFrom2() and so on...) Seems rather odd and I'd like to think there's a better/clever way but maybe it's just a Orchard thing.

Thanks in advance for any tips/advice!

도움이 되었습니까?

해결책

Yes, that's the way that Orchard works as far as I know, the migrations are stored as versions so you'll need to add UpdateFrom2().. for the next migration and so on.

Regards.

다른 팁

You should add one unit to UpdateFrom and one unit to return for each change.

 //Migrations.cs              

public int UpdateFrom2()
{
    SchemaBuilder.AlterTable("ProductPartRecord", table => table
        .AddColumn<string>("UnitColor", c => c.Nullable())
    );
    return 3;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top