2

次のように、MachineRecordにGroupRecordIDを含める必要があります。

MachineRecord

ID

番号
GroupRecord

GroupRecord

ID

私が試したこと:


public virtual GroupRecord GroupRecord { get; set; }
モデルaのプロパティとデータベースの列名を作成しようとしましたが、どういうわけかうまくいきません。プロパティに名前とテーブルの列を付けるなどGroupRecord_Id、他の方法を試しましたが、すべて結果が得られませんでした。GroupRecordIdGroupRecord

したがって、問題は、これを機能させてMachineRecordテーブルにGroupRecordIDが含まれるようにする方法です。

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; }
  }
4

1 に答える 1

4

問題の鍵は、モデルを構造化する方法と、Migrations.cs でモデルの関係を定義する方法に分かれています。

これは私が過去に使用したソリューションです。

まず、2 番目のクラスへのリンクを含むクラスです。

public class CaptureRecord : ContentPartRecord {
   public virtual string CaptureName { get; set; }
   public virtual OptionsRecord OptionsRecord { get; set; }   
}

注: を継承ContentPartRecordすると ID が付与されます。

次に、2 番目のクラス (この場合、継承する必要がない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;
}

これにより、2 つのテーブル間の関係を構築する方法に関して、正しい方向に進むことができれば幸いです。

編集: この種の構造にコンテンツを追加するには、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 に答える