如何设置我的域和LINQ语句,以便从数据库中删除记录?
public class Category {
public int CategoryId { get; set; }
public string Name { get; set; }
public List<Product> Products{ get; set; }
}
public class Product {
public int ProductId { get; set; }
public string Name { get; set; }
public int CategoryId {get; set; }
public Category Category{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是删除类别,并能够将删除级联到所有子产品.
这是唯一的方法吗?
Category category = new Category() { CategoryId = 1 } ;
context.AttachTo("Category", category);
context.DeleteObject(category);
context.Savechanges();
Run Code Online (Sandbox Code Playgroud) 我试图首先在EF代码中建立多对多关系,但默认约定是错误的.以下类描述了这种关系:
class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
class Account
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
一个帐户可以有许多产品.
但是,EF约定将创建DB表,如下所示:
Products Table
--------------
Id
Name
Account_Id <- What is this?
Accounts Table
--------------
Id
Name
Run Code Online (Sandbox Code Playgroud)
这看起来不像是一个多对多的表结构?如何配置流畅的API以反映关系并创建中间表:
AccountProducts Table
---------------------
Account_Id
Product_Id
Run Code Online (Sandbox Code Playgroud) 我不确定如何使用代码首次迁移功能.根据我的理解,它应该创建我的数据库(如果它已经不存在),并根据迁移文件将其更新为最新的模式.但我正在努力解决它,因为我总是会遇到很多错误,而且我不确定如何正确使用它.
internal class Program
{
private static void Main()
{
EntityFrameworkProfiler.Initialize();
Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());
using (var context = new MyContext())
{
var exists = context.Database.Exists();
if (!exists)
{
context.Database.Create();
}
var element = context.Dummies.FirstOrDefault();
}
}
}
public class MyContext : DbContext
{
public MyContext()
: base(string.Format(@"DataSource=""{0}""", @"C:\Users\user\Desktop\MyContext.sdf"))
{
}
public DbSet<Dummy> Dummies { get; set; }
}
internal sealed class Configuration : DbMigrationsConfiguration<MyContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(CodeFirstTest.MyContext …Run Code Online (Sandbox Code Playgroud) 我是MVC 4和实体框架的新手,当我从包管理器控制台运行此命令时:
Enable-Migrations -ContextTypeName MyFirstMvcApp.Models.InventoryDbContext
Run Code Online (Sandbox Code Playgroud)
Join-Path:无法将参数绑定到参数'Path',因为它为null.
我收到以下错误:
Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:363 char:27
+ $toolsPath = Join-Path <<<< $installPath tools
+ CategoryInfo : InvalidData: (:) [Join-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand
Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:392 char:73
+ $utilityAssembly = [System.Reflection.Assembly]::LoadFrom((Join-Path <<<< $toolsPath EntityFramework.PowerShell.Utility.dll))
+ CategoryInfo : InvalidData: (:) [Join-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand
You cannot call a method on a …Run Code Online (Sandbox Code Playgroud) 我在我当前的项目中使用Entity Framework Code First.数据库由许多表,许多视图和许多函数组成.我可以使用Entity Framework Code First创建表.但我无法找到使用Entity Framework Code First创建存储过程的方法.我知道Database-First策略将满足我的要求,一切运行良好,但我不想将Database-First策略用于我现有的项目代码.
请帮助我一个人,使用Entity Framework Code First策略创建存储过程的最佳方法是什么?
请帮帮我,谢谢.
我已经认识到这一概念AsNoTracking(),DetectChanges()以及AutoDetectChangesEnabled最近.据我所知,当使用Entity Framework从数据库中获取记录时AsNoTracking(),实体框架不会跟踪这些记录的任何更改,在这种情况下更新获取记录的任何属性都将失败.
我的问题是,如果以这种方式获取记录,它是否也会导致禁用对DetectChanges()的自动调用,或者是否必须通过设置显式完成:
Context.Configuration.AutoDetectChangesEnabled = false;
Run Code Online (Sandbox Code Playgroud)
另请告诉我,如果在为了只读的目的而严格获取数据时执行这两个操作,它会产生什么影响(在性能方面):
Context.Configuration.AutoDetectChangesEnabled = false;
Context.Set<T>().AsNoTracking();
Run Code Online (Sandbox Code Playgroud) 我使用EF 6.1.x Code First.
我已经读过EF最新版本不支持带过滤器表达式的索引.
SO上也没有解决方案:
一年后,使用Code First和DbMigrations使过滤器索引工作的工作方式是什么?
CREATE UNIQUE NONCLUSTERED INDEX [IX_DefaultLanguageApplicationId] ON [dbo].[Languages]
(
[IsDefaultLanguage] ASC,
[ApplicationId] ASC,
)
WHERE ([IsDefaultLanguage]=(1))
Run Code Online (Sandbox Code Playgroud) 我正在使用Entity Framework 4 CTP5代码第一种方法,我有一个每层次表(TPH)映射.层次结构中的某些类具有共同的属性.
public class BaseType
{
public int Id { get; set; }
}
public class A : BaseType
{
public string Customer { get; set; }
public string Order { get; set; }
}
public class B : BaseType
{
public string Customer { get; set; }
public string Article { get; set; }
}
public class C : BaseType
{
public string Article { get; set; }
public string Manufacturer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
默认约定将此映射到以下列: …
我正在开发一个项目,该项目使用Entity Framework 4.1将我们的各种对象持久化到数据库(代码优先).
我在Visual Studio中使用本地SQL Express DB进行测试,我们的Jenkins服务器将已提交的代码部署到测试服务器.发生这种情况时,我暂时将本地连接字符串更改为指向测试数据库服务器并运行单元测试以重新创建测试数据库,以使其与我们的最新实体等相匹配.
我最近注意到我们的测试服务器发出了这个错误:
自创建数据库以来,支持"EntityFrameworkUnitOfWork"上下文的模型已更改.手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer.例如,DropCreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可选择使用新数据对其进行种子设定.
这通常表明我们的代码已经更改,我需要运行单元测试来重新创建数据库.除了我刚刚那样做!我不相信我们的部署过程有任何问题 - 测试服务器上的DLL似乎与我的本地环境中的版本相同.是否有任何其他设置或环境因素可能导致自创建数据库以来模型发生更改的错误?
我是新来的 - 谢谢你的帮助!
c# sql-server entity-framework ef-code-first entity-framework-4.1
我正在尝试将一些常量添加到我的数据库中:
context.Stages.AddOrUpdate(s => s.Name,
new Stage()
{
Name = "Seven",
Span = new TimeSpan(2, 0, 0),
StageId = 7
});
context.Stages.AddOrUpdate(s => s.Name,
new Stage()
{
Name = "Eight",
Span = new TimeSpan(1, 0, 0, 0),
StageId = 8
});
Run Code Online (Sandbox Code Playgroud)
这是我的用于EF Codefirst Migrations的Seed()函数.它在第八阶段失败,具体如下:
System.Data.UpdateException:更新条目时发生错误.有关详细信息,请参阅内部异常 ---> System.OverflowException:SqlDbType.Time溢出.值'1.00:00:00'超出范围.必须在00:00:00.0000000和23:59:59.9999999之间.
为什么我无法使用EF存储时间跨度?我真的希望我不需要在这两端做一些愚蠢的时间转换...