【问题标题】:Entity Framework Core 2.2.3 not creating table using code-first approach vs 2017Entity Framework Core 2.2.3 不使用代码优先方法与 2017 创建表
【发布时间】:2019-08-02 12:41:03
【问题描述】:

您好,我正在尝试通过以下教程学习 EntityFramework Core http://www.entityframeworktutorial.net/code-first/what-is-code-first.aspx

到目前为止我已经创建了

  • 域类
  • DbContextImpl 类
  • 执行类

由于某种原因,我无法使用代码优先方法生成数据库表。 框架:

  • .Net Core 2.2
  • EF Core 2.2.3[已编辑]
  • SQL Server v17.9.1

我的代码如下:

using Microsoft.EntityFrameworkCore;

namespace EntityFrameworkTuts.repo
{
    public class TwitterDbContext: DbContext
    {
        public DbSet<User> Users { get; set; }

        public DbSet<Tweet> Tweet { get; set; }

        public TwitterDbContext() : base()
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Data Source=sys-win;Initial Catalog=milton;Persist Security Info=True;User ID=sa;Password=password");
        }


    }
}

namespace EntityFrameworkTuts
{
    public class User
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public ICollection<Tweet> Tweets { get; set; }
    }
}

namespace EntityFrameworkTuts
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            using (var context = new TwitterDbContext())
            {
                User user = new User
                {
                    Name = "John Doe",
                };

                context.Users.Add(user);
                var result = context.SaveChanges();
                Console.WriteLine($"save user ${user.Name} with id ${result}");
            }
        }
    }
}

我在下面遇到异常:

Unhandled Exception: Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid object name 'Users'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)

我做了一些小研究,看起来框架无法找到用户表。

EFCore 2.2.3 应该自动创建一个吗?请让我知道我可能会犯什么愚蠢的错误。

已编辑:感谢 Marc 解决版本问题。

【问题讨论】:

  • 这个错误发生在哪里?你完成迁移了吗?
  • 您是否在异常中看到此消息:System.Data.SqlClient.SqlException: Invalid object name 'Users'. ??我认为你必须Add-MigrationUpdate-Database
  • 1) 转到工具 => Nuget 包管理器 => 包管理器控制台。 2) 设置 Dbcontext 所在的默认项目3) 键入 enable-migrations。此命令将代码优先添加到您的项目中4) 键入add-migration anyname 5) 键入update-database。现在所有都是在 db 中创建的表,您在上下文中提到了 DbSet。
  • 没有“EF Core 6”——EF 的“非核心”版本现在是 6.2,但 EF Core 版本是 2.2(带有 3.0在作品中)。那你用什么??版本 6 中的“基本”EF,或者真正的 EF Core(如果是:什么 EF Core 版本?)
  • 感谢 marc 提供有关版本控制的详细信息,当提到 6 时,我会考虑 6.x.x 版本,除非真的搞砸了,请 ty 解释。 @er-sho 让我试一试。

标签: c# entity-framework-core


【解决方案1】:

感谢@er-sho,我设法使用代码优先的方法生成数据库。 以下事情帮助了我:

转到工具 => Nuget 包管理器 => 包管理器控制台。

用于创建数据库迁移代码

dotnet ef migrations add CreateDatabase --output-dir Data/Migrations

执行迁移代码:

dotnet ef database update

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-12
    • 2020-04-29
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2016-04-14
    相关资源
    最近更新 更多