EFコードファーストを使用してDBスキーマ(EF 6、.NET 4.5.2)を生成しています。 I私が挿入したい二つのクラスがあります。ここではEFコード一次移行がコンパイルされない
public class MatrixFile
{
[Key]
public int Id { get; set; }
public string FilePath { get; set; }
public virtual List<MatrixData> Data { get; set; }
}
public class MatrixData
{
[Key]
public int Id { get; set; }
public int OdPairKey { get; set; }
public double Value { get; set; }
}
は私のDbContext
public class MyDataContext : DbContext
{
public virtual DbSet<MatrixFile> MatrixFiles { get; set; }
public virtual DbSet<MatrixData> MatrixData { get; set; }
}
ですが、私は試してみて、パッケージマネージャコンソールに次のコマンドを入力して、EFの私のDBスキーマを生成します。
Enable-Migrations
Add-Migration GenerateDatabase
これはEFが私のために生成されたことを移行です:
public partial class GenerateDatabase : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.MatrixDatas",
c => new
{
Id = c.Int(nullable: false, identity: true),
OdPairKey = c.Int(nullable: false),
Value = c.Double(nullable: false),
MatrixFile_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.MatrixFiles", t => t.MatrixFile_Id)
.Index(t => t.MatrixFile_Id, name: ""IX_MatrixData_MatrixFile_Id"");
CreateTable(
"dbo.MatrixFiles",
c => new
{
Id = c.Int(nullable: false, identity: true),
FilePath = c.String(),
})
.PrimaryKey(t => t.Id);
}
public override void Down()
{
DropForeignKey("dbo.MatrixDatas", "MatrixFile_Id", "dbo.MatrixFiles");
DropIndex("dbo.MatrixDatas", ""IX_MatrixData_MatrixFile_Id"");
DropTable("dbo.MatrixFiles");
DropTable("dbo.MatrixDatas");
}
}
IX_MatrixData_MatrixFile_Id
の前後に二重引用符があるため、.Index(t => t.MatrixFile_Id, name: ""IX_MatrixData_MatrixFile_Id"");
にコンパイルエラーがあります。なぜこうなった?手動で移行をハッキングすることなく正しい移行コードを生成するにはどうすればよいですか?
なぜ地球に何か言い伝えがありますか?ただそれを削除し、それは動作します – Stormhashe
こんにちは@Stormhashe。あなたのコメントは基本的に私の質問を言い換えていますが、スペルや文法はずっと悪いです。私は余分な引用符を取り除くだけでそれを修正できることを知っています。しかし、なぜEFがコードを生成しているのか知っていますか? – Steztric
MSSQLを使用していますか? –