2

我希望 MachineRecord 包含一个 GroupRecord Id,如下所示:

机器记录

Id
姓名
号码
GroupRecord

集体记录

标识
名称

我试过的:

我试图在模型 a
public virtual GroupRecord GroupRecord { get; set; }
和数据库列 name中创建属性GroupRecord_Id,但不知何故,这不起作用,尝试了其他一些方法,例如为属性提供 nameGroupRecordId和 table 列GroupRecord等等,但都没有结果。

所以问题是,如何让它工作,以便 MachineRecord 表包含 GroupRecord Id?

机器.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; }
  }
}

组.cs

namespace PowerAll.Voorraad.Models
{
  public class GroupRecord
  {
    public virtual int Id { get; set; }
    public virtual string GroupName { get; set; }
  }
}

迁移.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;
    }
  }
}

机器控制器.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:

现在它正在工作,这是我的工作代码(对于那些也在为此苦苦挣扎的人)

迁移.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;
    }
  }

机器记录.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; }
  }
4

1 回答 1

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
     });
   }
 }
于 2012-11-16T11:51:04.377 回答