C# .net core 1.1 entityframework和mysql数据库连接
我正在安装vs 2017,并尝试使用.net core 1.1、entity framework和我的sql数据库创建一个测试web api项目 下面是我正在使用的包裹清单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> &
<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);
}
}