问题标签 [entity-framework-6.1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 实体框架以任何方式返回 SQL 作为 IQueryable 的结果
假设正在使用 EF6.1....
假设“Category”是 EF 保留的 POCO 类型,“context”具有称为“categories”的 DbSet 属性,“x”被定义为 int 类型的合法本地,并且 c.ID 也是 int 类型......
给定以下表达式
有没有办法,在查询发生之前,将编译后的 SQL 语句作为字符串返回而不访问数据库?
entity-framework-6.1 - 在 EF 6.1 中创建具有特定名称和文件位置的新数据库
我正在为我的应用程序制作一个小型数据库引导实用程序。我需要从我的模型类创建一个数据库,但我希望能够设置数据库文件名和位置。
如果我执行默认 DbContext 实例化 - 它将尝试创建名为 DataAccessModule.DbContext 的 Db,并且数据库文件(mdf 和 ldf)将位于 Program Files\SQL... 文件夹中。我需要使用我的名称(由用户在引导应用程序的 UI 中输入)以及位于用户选择的文件夹中的 mdf 和 ldf 文件创建数据库。
我怎样才能做到这一点?
entity-framework-6.1 - 实体框架收到拒绝访问,而普通 SQL 命令没有
我试图强制实体框架在我想要的位置创建数据库,但它总是抱怨“访问被拒绝”:
错误是:未处理的异常:(System.Data.SqlClient.SqlException)无法打开物理文件“D:\te_mp\zeliboba_odin.mdf”。操作系统错误 5:“5(拒绝访问。)”。
但是,如果我使用具有相同连接字符串的普通 SQL 命令 - 则 DB 已成功创建。
这两种情况有什么区别?为什么EF失败?
更新 1:第一个连接字符串是: var sqlConnection = new SqlConnection(@"Server=.\SQLEXPRESS;Integrated Security=SSPI;"); 这将工作将普通的 SQL 命令发送到服务器 - 我现在正在创建数据库。接下来我创建数据库,我有它的名字。所以我喜欢这样: var connectionString = String.Format(@"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;database={0}", dbName); sqlConnection = new SqlConnection(connectionString); using (var db = new MyDbContext(sqlConnection, true)) { // EF 创建数据库没有任何麻烦。}
我用 EF 尝试过的内容 - 设置 AttachDatabaseFile(不记得参数的确切名称)。EF 确实尝试在提供的位置创建数据库,但失败并出现访问被拒绝错误。我尝试在连接字符串中使用 args,但失败了,而且我不知道如何指向 EF 在具有特定文件名的特定文件夹中创建数据库(确保 SQL Server 可以在其中创建数据库本身)。
c# - EF Code First 迁移:重新创建数据库和种子
我正在使用MigrateDatabaseToLatestVersion
初始化程序和Seed
方法DbMigrationConfiguration
:
自动迁移适用于现有数据库。但是当没有现有的数据库(* .mdf,LocalDb)时,在第一个应用程序启动初始化程序时,只会调用没有的Up()
方法。方法仅在应用程序重新启动后调用。DbMigration
Seed
Seed
如果我在第一次启动之前手动调用Upgrade-Database
,它将创建数据库,并Seed
在第一次运行时调用方法。
当没有现有数据库时,如何在应用程序启动时使用种子数据自动初始化数据库?
c# - 如何同步导航属性和外键?
首先使用实体框架 6.1 代码,我尝试将导航属性与外键同步。
在 Product 上使用 foreygn 键查看我的许可证实体类:
在 winform 代码中,我创建了一个许可证实体,并在组合框的选定值更改事件中设置了产品导航属性:
为什么设置导航属性时 this.License.ProductId 不同步?怎么了?
c# - EF Fluent Mapping - 从另一个表映射一个集合字段
这可能已经在某处被问过,但我找不到与我正在尝试做的完全匹配的问题。
在数据库级别,我有 TableB,它只有两个字段 - TableA 的外键和 nvarchar(max) 代码字段。从 TableA 到 TableB 的关系是一对多的。
在 EF 级别,我想完全跳过映射 TableB。表 A 看起来像这样:
我希望从所有相关 TableB 实体的 Code 字段中填充 BCodes。我知道我可以使用数据库上的视图和其他 hack 来实现这一点,但这破坏了关注点的分离。这是否可以使用 EF,或者我是否必须仅使用一个字符串属性映射 TableB 实体?
更新 我应该澄清一下,对于我的具体情况,这可能是一个只读集合。偶然发现这个问题的其他人可能有不同的需求,所以如果您有实现它的读/写方式的想法,那也很棒。
c# - 将 EF5 升级到 EF 6,现在得到“找不到对象,因为它不存在或您没有权限。”
我有一个使用引用类库的主要 Web 应用程序项目,该类库首先使用 EF 代码。在主 Web 应用程序中,我还有几个 .edmx 文件。这是一个使用自动迁移 (MigrateDatabaseToLatestVersion) 的具有真实数据的生产应用程序。
我刚刚从 EF 5 升级到 EF 6。升级之间根本没有类/上下文更改。我只是升级并修复了我的 .edmx 文件。没有编译时错误。然而,当我尝试我的主应用程序时,我收到以下错误:
找不到对象“dbo.FormItemResponseFormItemAnswers”,因为它不存在或您没有权限。
现在我已经仔细检查了我的数据库,并且该表应该并且确实存在,并且用于连接的登录名具有数据库的 dbo 权限,就像升级前一样。所以我不知道为什么我会收到这个错误。没有改变。堆栈跟踪如下所示:
[SqlException(0x80131904):找不到对象“dbo.FormItemResponseFormItemAnswers”,因为它不存在或您没有权限。] System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔中断连接,操作
1 wrapCloseInAction) +1767866 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) +5352418 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet stateOjbjHandler, TdsParser , Boolean& dataReady) +1691 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +869 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +410 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +160 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext
1 c) +36 System.Data。 Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch(TTarget target, Func
3 操作,TInterceptionContext,interceptionContext,Action3 executing, Action
3 已执行)+138 System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand 命令,DbCommandInterceptionContext 拦截上下文)+476 System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() +177 System.Data.Entity.Migrations。 DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement, DbInterceptionContext interceptionContext) +307 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement, DbInterceptionContext interceptionContext) +59 System.Data.Entity.Migrations.DbMigrator。 ExecuteStatementsInternal(IEnumerable1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) +110 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable
1 个迁移语句,DbConnection 连接)+799 System.Data.Entity.Migrations.<>c__DisplayClass30.b__2e() +66 System.Data.Entity.SqlServer.<>c__DisplayClass1.b__0() +34 System.Data.Entity.SqlServer。 DefaultSqlExecutionStrategy.Execute(Func1 operation) +251 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) +196 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable
1 migrationStatements, DbTransaction existingTransaction) +326 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements) +39 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable
1 migrationStatements) +42 System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable1 operations, IEnumerable
1 systemOperations, Boolean downgrading, Boolean auto) +1335 System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading) +1358 System.Data.Entity.Migrations.Infrastructure.MigratorBase.AutoMigrate (字符串 migrationId、VersionedModel sourceModel、VersionedModel targetModel、布尔降级)+64 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId) +741 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable
1 pendingMigrations, String targetMigrationId, String lastMigrationId) +59 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) +888 System.Data.Entity.Migrations.<>c__DisplayClassc.b__b() +38 System.Data.Entity .Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +516 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +42 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) +136 System. Data.Entity.Migrations.Infrastructure.MigratorBase.Update() +33 System.Data.Entity.MigrateDatabaseToLatestVersion2.InitializeDatabase(TContext context) +154 System.Data.Entity.Internal.<>c__DisplayClassf
1.b__e() +165 System.Data.Entity.Internal.InternalContext.PerformInitializationAction(动作动作) +110 System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() +660 System.Data.Entity.Internal.LazyInternalContext.b__4 (InternalContext c) +31 System.Data.Entity.Internal.RetryAction1.PerformAction(TInput input) +143 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action
1 动作) +292 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() +123 System.Data.Entity.Internal.InternalContext.Initialize() +41 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +39 System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +137 System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext() +38 System.Data.Entity.Infrastructure.DbQuery1.System.Linq.IQueryable.get_Provider() +99 System.Linq.Queryable.Where(IQueryable
1 源,表达式`1谓词)+63
我还没有找到其他人遇到这个问题。有人可以阐明一下吗?我不知道该怎么做,通常的谷歌显示大部分 SQL 错误与 EF 无关。
同样,上下文/对象中没有任何变化,也没有对数据库进行任何手动更改。我仔细检查了我的源代码控制。我无法从堆栈跟踪中判断它是否正在尝试运行迁移,但我使用自动迁移并且它不应该尝试迁移,因为没有任何改变。
编辑:我知道 _MigrationHistory 表中存储了 EF 版本号,我的所有版本目前都是 5.0.0.net45。是否有可能尝试为 v6 创建新的迁移历史记录?但同样,没有上下文变化我不知道它试图用那个表做什么。
entity-framework-6.1 - 从多个 FK 获取最大 Id 的最佳方法
ALBUM 有歌曲,每首歌都包含历史。历史是自动增量的。多首歌曲都有历史,但我只想要一个最大的 Id 值。
我踩这个
但是只取第一首歌的最后一个值。需要任何歌曲的最后一个值。
entity-framework - 希望 Entity Framework 6.1 急切加载仅加载第一级
我不确定我正在以错误的方式接近,或者这是一种默认行为,但它没有按照我期望的方式工作......
这是两个示例类...
第二个是部门
上下文配置
我正在尝试加载姓氏来自“史密斯”的人
上面的查询加载 foundPeople 只有 FirstName 和 LastName 没有 Department 对象。这是一个正确的行为,因为我的 LazyLoading 已关闭。这也是意料之中的。
现在在与 Eager loading Department 的另一个查询中,
上面的查询加载 foundPeople 与 FirstName、LastName、Department 与 Department->Name 以及 Deparment->People(该部门中的所有人,我不想要,我只想加载第一级 Included 属性。
我不知道这是有意的行为还是我犯了一些错误。
有没有办法只加载第一级包含的属性,而不是完整的图表或所有级别的包含属性。
c# - WebApi 2 和 EF 6.1 序列化失败
我对 WebApi2 和 EF 6.1 有问题(代码优先)
我有 2 个模型(主-详细信息)
ApiController
如果我执行 get withapi/Master/1
但是如果我执行api/Master
我得到的错误消息是:
我在 WebApiConfig.cs 中强制以 JSON 格式响应
重要提示:如果我使用 EF 6.0(删除不支持的索引属性和其他属性),这可以正常工作。所以我很困惑!
提前致谢。
Ps:我对 C#(以及 WebApi 和 EF)真的很陌生
编辑:正如Wiktor Zychla建议的那样,只需更改一下IQueryable
,IList
现在就return db.Masters.ToList()
可以正常工作了!但是,如果脚手架以这种方式生成,为什么 IQueryable 会失败?以及为什么 IQueryable 适用于 EF 6.0 而不是 6.1?谢谢!