我希望MachineRecord包含GroupRecord Id,如下所示:
MachineRecord
标识
名称
数
GroupRecord
GroupRecord
标识
名称
我尝试过:
我试图让模型中的属性成为一个
public virtual GroupRecord GroupRecord { get; set; }
和数据库列名GroupRecord_Id
,但不知何故不起作用,尝试了一些其他方式,如赋予属性名称GroupRecordId
和表格列GroupRecord
等等,但所有没有结果。
所以问题是,如何让它工作,以便MachineRecord表包含GroupRecord Id?
Machine.cs
namespace PowerAll.Voorraad.Models
{
public class MachineRecord
{
public virtual int Id { 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 string SerialNumber { get; set; }
public virtual GroupRecord GroupRecord { get; set; }
public virtual char PriceType { get; set; }
public virtual decimal Price { get; set; }
public virtual int Year { get; set; }
}
}
Group.cs
namespace PowerAll.Voorraad.Models
{
public class GroupRecord
{
public virtual int Id { get; set; }
public virtual string GroupName { get; set; }
}
}
Migrations.cs
namespace PowerAll.Voorraad
{
public class Migrations : DataMigrationImpl
{
public int Create()
{
SchemaBuilder.CreateTable("GroupRecord", table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column<string>("GroupName", column => column.WithLength(100))
);
SchemaBuilder.CreateTable("MachineRecord", table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column<int>("MachineNumber", column => column.NotNull())
.Column<string>("Title", column => column.NotNull().WithLength(40))
.Column<string>("Description1", column => column.WithLength(70))
.Column<string>("Description2", column => column.WithLength(70))
.Column<string>("Description3", column => column.WithLength(70))
.Column<string>("Description4", column => column.WithLength(70))
.Column<string>("Description5", column => column.WithLength(70))
.Column<string>("Description6", column => column.WithLength(70))
.Column<string>("SerialNumber", column => column.WithLength(20))
.Column<int>("GroupRecord_id", column => column.NotNull())
.Column<char>("PriceType", column => column.NotNull().WithLength(1))
.Column<decimal>("Price", column => column.NotNull())
.Column<int>("Year", column => column.WithLength(4))
);
// Return the version that this feature will be after this method completes
return 1;
}
}
}
MachineController.cs
namespace PowerAll.Voorraad.Controllers
{
[Themed]
public class MachineController : Controller
{
private readonly IRepository<MachineRecord> machineRecords;
public MachineController(IRepository<MachineRecord> MachineRecords) {
machineRecords = MachineRecords;
}
public ActionResult List()
{
var items = machineRecords.Table;
return View(items);
}
}
}
编辑2:
我感谢内啡肽,但是当我尝试执行AddDummyData()
时,我收到了这个错误:could not insert: [PowerAll.Voorraad.Models.MachineRecord][SQL: INSERT INTO PowerAll_Voorraad_MachineRecord (MachineNumber, Title, Description1, Description2, Description3, Description4, Description5, Description6, SerialNumber, PriceType, Price, Year) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); select SCOPE_IDENTITY()]
当我通过代码时,所有值都被正确发布。
这是我的AddDummyData():
public void AddDummyData()
{
var GroupRecord = new GroupRecord { GroupName = "Oldtimers" };
groupRecords.Create(GroupRecord);
var MachineRecord = new MachineRecord
{
MachineNumber = 100001,
Title = "Landini L25",
Description1 = "Desc 1",
Description2 = "Desc 2",
Description3 = "Desc 3",
Description4 = "Desc 4",
Description5 = "Desc 5",
Description6 = "Desc 6",
SerialNumber = "100000",
GroupRecord = GroupRecord,
PriceType = 'I',
Price = 7999.99m,
Year = 1954
};
machineRecords.Create(MachineRecord);
}
编辑3:
现在它正在运行,这是我的工作代码(对于那些正在努力解决这个问题的人)
Migrations.cs
public class Migrations : DataMigrationImpl
{
public int Create()
{
SchemaBuilder.CreateTable("MachineRecord", table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column<int>("GroupRecord_Id")
.Column<int>("MachineNumber", column => column.NotNull())
.Column<string>("Title", column => column.NotNull().WithLength(40))
.Column<string>("Description", column => column.WithLength(70))
.Column<char>("PriceType", column => column.NotNull().WithLength(1))
.Column<decimal>("Price", column => column.NotNull())
.Column<int>("Year", column => column.WithLength(4))
);
SchemaBuilder.CreateTable("GroupRecord", table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column<string>("Name")
);
return 1;
}
}
MachineRecord.cs
public class MachineRecord
{
public virtual int Id { get; set; }
public virtual int MachineNumber { get; set; }
public virtual string Title { get; set; }
public virtual string Description { get; set; }
public virtual GroupRecord GroupRecord { get; set; }
public virtual char PriceType { get; set; }
public virtual decimal Price { get; set; }
public virtual int Year { get; set; }
}
GroupRecord.cs
public class GroupRecord
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
答案 0 :(得分:4)
问题的关键在于如何构建模型以及如何在Migrations.cs中定义它们之间的关系。
这是我过去使用的解决方案。
首先,包含第二类链接的类。
public class CaptureRecord : ContentPartRecord {
public virtual string CaptureName { get; set; }
public virtual OptionsRecord OptionsRecord { get; set; }
}
注意:继承自ContentPartRecord
会为您提供ID。
然后第二个类(在这种情况下我不需要继承ContentPartRecord
所以我自己添加ID)
public class OptionsRecord {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
在Migrations.cs中,在CaptureRecord表定义中添加OptionRecord ID
public class Migrations : DataMigrationImpl
{
SchemaBuilder.CreateTable("CaptureRecord",
table => table
.ContentPartRecord()
.Column<string>("CaptureName")
.Column<int>("OptionsRecord_id");
SchemaBuilder.CreateTable("OptionsRecord",
table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column<string>("Name"));
return 1;
}
希望这将使您在如何构建两个表之间的关系方面朝着正确的方向发展。
编辑:要向此类结构添加内容,您需要使用IRepository
实例自行手动管理。
所以在你的控制器中AddDummyData
给出了一个例子。
public class MachineController : Controller {
private readonly IRepository<MachineRecord> _machineRecords;
private readonly IRepository<GroupRecord> _groupRecords;
public MachineController(IRepository<MachineRecord> machineRecords, IRepository<GroupRecord> groupRecords) {
_machineRecords = machineRecords;
_groupRecords = groupRecords;
}
public void AddDummyData(){
// create a grouprecord in the database
_groupRecords.Create(new GroupRecord { Id = 1, GroupName = "One" });
// get the groupRecord just created (annoying that Create doesnt return the instance,
// but I dont know a way around this
var groupRecord = _groupRecords
.Fetch(x => x.Id == 1)
.Single();
// create a machine return with the grouprecord assigned to the GroupRecord property
_machineRecords.Create(new MachineRecord {
Id = 1,
..
GroupRecord = groupRecord
});
}
}