【发布时间】:2020-11-14 05:18:23
【问题描述】:
我是 Entity 框架的新手,我不明白为什么它会给我一个 sql 语法错误,我认为使用 EFCore 的全部目的是处理 sql 语法并将所有 sql 查询抽象出来
这是我的模型:
class Block
{
public BlockHeader Header {get ;}
public List<Transaction> Transactions {get;}
public Block(List<Transaction> transactions, BlockHeader header)
{
Transactions= transactions;
Header=header;
}
public Block(){
}
}
public class BlockHeader
{
public byte[] Hash {get ;}
public byte[] PreviousHash { get; }
public DateTime timestamp { get; }
public int version{ get; }
public byte[] MerkleRoot{ get; }
public int SequenceNumber {get ; private set;}
public BlockHeader (byte[] previoushash,int sequencenumber,List<Transaction> transactions)
{
timestamp = DateTime.Now;
PreviousHash = previoushash;
version = 1;
SequenceNumber = sequencenumber;
MerkleRoot = ComputeMerkleRoot(transactions);
Hash = ComputeBlockHash();
}
这是我的数据库上下文类
class BlockchainDB : DbContext
{
public BlockchainDB()
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("server=localhost;database = Blockchain ;user = root ; password = password");
}
protected override void OnModelCreating(ModelBuilder builder){
builder.Entity<Block>(e => e.HasNoKey());
}
}
当我添加迁移时,它会成功添加,但是当我使用此命令更新数据库时
dotnet ef database update
它输出这个错误:
Failed executing DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE `Block` (
);
MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3
【问题讨论】:
-
@Bizhan EntityFramework 是这样做的,不是我,我什至找不到错误的位置
-
它试图创建一个没有任何属性的表,这似乎很不正确。您没有导航属性的设置器。如果您尝试封装它,请使用受保护的空构造函数和私有设置器。我很确定可以在其中一些指针中找到错误。错误位于生成的SQL中
CREATE TABLEBlock`(--如果为空,此方法将不起作用。);` -
尝试将 DbSet
添加到您的 DbContext 类中
标签: c# .net-core orm entity-framework-core mysql.data