C# .net core 1.1 entityframework和mysql数据库连接

C# .net core 1.1 entityframework和mysql数据库连接,c#,mysql,.net-core,entity-framework-core,asp.net-core-webapi,C#,Mysql,.net Core,Entity Framework Core,Asp.net Core Webapi,我正在安装vs 2017,并尝试使用.net core 1.1、entity framework和我的sql数据库创建一个测试web api项目 下面是我正在使用的包裹清单 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp1.1</TargetFramework> </PropertyGroup> &

我正在安装vs 2017,并尝试使用.net core 1.1、entity framework和我的sql数据库创建一个测试web api项目

下面是我正在使用的包裹清单

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0-preview1-final" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
    <PackageReference Include="MySql.Data.EntityFrameworkCore" Version="7.0.7-m61" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="1.1.2" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
  </ItemGroup>

</Project>
我已经在MySql中创建了数据库

更新2

 public class Categories
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]        
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
        public string Description { get; set; }
        public byte Picture { get; set; }


    }
更新3

public class Categories
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Key]
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
        public string Description { get; set; }
        public byte Picture { get; set; }
    }
实体类型“Categories”需要定义主键

实体框架需要主键才能工作。有两种方法可以做到这一点(据我所知)

比如说

//Data Annotations
public class EmployeeEntity : BaseEntity
{
    // Denotes the primary key column
    [Key]
    // Add this if your column is not auto-generated
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public short Id { get; set; }

    public string Name { get; set; }

    // more fields, probably
}

// Fluent API
public partial class EmployeeMap : EntityTypeConfiguration<EmployeeEntity>
{
    public EmployeeMap()
    {
        ToTable("employee");
        HasKey(emp => emp.Id)
          .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    }
}
//数据注释
公共类EmployeeEntity:BaseEntity
{
//表示主键列
[关键]
//如果列不是自动生成的,请添加此选项
[数据库生成(DatabaseGeneratedOption.None)]
公共短Id{get;set;}
公共字符串名称{get;set;}
//可能还有更多的领域
}
//Fluent API
公共分部类EmployeeMap:EntityTypeConfiguration
{
公共雇员地图()
{
ToTable(“员工”);
HasKey(emp=>emp.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
}
请注意,如果主键不是自动生成的,则需要使用您选择的任何方法告诉EF

注释:
[DatabaseGenerated(DatabaseGeneratedOption.None)]


Fluent:
HasKey(emp=>emp.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)

其中是表格的模型。在类别表模型中,键属性前应该有一个[Key]。您可以共享类别表模型吗?请参阅更新,类别模型。请参阅更新,类别模型。@matrixwebtech,好的。请参见我的关于自动生成关键点的编辑。我最近遇到了这个问题,这是因为MySQL连接器假设PK列是自动生成的。我必须指定它不是。我根据您的建议更改了模型,请参阅更新2,但不起作用。同样的例外情况。@matrixwebtech您仍然需要
[Key]
注释。添加这两个选项,然后重试。我将编辑我的答案以演示。@matrixwebtech数据库中的列名是什么?这是一模一样的吗?如果没有,则需要添加“[列(名称:“ActualColumnName”)]”注释。我将在这里补充一点,我使用的是fluentapi方法,它适用于我的MySQL 5.1。如果无法使注释正常工作,您可能希望尝试这种方法。
public class Categories
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Key]
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
        public string Description { get; set; }
        public byte Picture { get; set; }
    }
//Data Annotations
public class EmployeeEntity : BaseEntity
{
    // Denotes the primary key column
    [Key]
    // Add this if your column is not auto-generated
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public short Id { get; set; }

    public string Name { get; set; }

    // more fields, probably
}

// Fluent API
public partial class EmployeeMap : EntityTypeConfiguration<EmployeeEntity>
{
    public EmployeeMap()
    {
        ToTable("employee");
        HasKey(emp => emp.Id)
          .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    }
}