Tag: entity framework

如何加速DbSet.Add()?

我必须从CSV文件导入大约30k行到我的SQL数据库,这可能需要20分钟。 使用分析器进行故障排除向我显示DbSet.Add占用的时间最多,但为什么呢? 我有这些Entity Framework Code-First类: public class Article { // About 20 properties, each property doesn’t store excessive amounts of data } public class Database : DbContext { public DbSet Articles { get; set; } } 对于我的for循环中的每个项目,我做: db.Articles.Add(article); 在for循环之外我做: db.SaveChanges(); 它与我的本地SQLExpress服务器连接,但我想在SaveChanges被调用之前没有任何东西,所以我猜服务器不会出现问题….

在不创建数据库的情况下,将Mini-Profilier与EF 4.3和MVC 4配合使用

我有一个问题,我们在现有数据库中使用EF 4.3 Code First。 我想使用带有EF的Mini-Profiler并打电话 MvcMiniProfiler.MiniProfilerEF.Initialize(); 但是,由于我们实际上并未创建任何表,因此dbo .__ MigrationHistory和dbo.EdmMetadata表不存在。 分析器最终崩溃,因为它们不存在。 有没有办法让探查器忽略这些EF Code First特定的表? 谢谢! 编辑: 这些是我得到的例外:(它们分开来) Invalid object name ‘dbo.__MigrationHistory’. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at […]

从基础asp.net标识用户创建inheritance用户

我有问题,我想在示例中创建N,两个用户对象(例如客户和供应商),这些都是asp.net IdentityUser对象所固有的。 除了来自IdentityUser的数据之外,这些对象具有非常不同的附加数据。 我想使用IdentityUser用户,因为这为我提供了一种灵活的方式来处理身份validation和授权。 这个例子已被删除,但应提供有关无法创建具体用户的充分信息(例如供应商的客户)。 我似乎需要使用UserManager对象,因为它还负责创建例如密码哈希和其他安全信息。 我收到以下错误: {“附加’供应商’类型的实体失败,因为同一类型的另一个实体已经具有相同的主键值。当使用’附加’方法或将实体的状态设置为’未更改’或’已修改时,可能会发生这种情况’如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且还没有接收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态来跟踪图表然后根据需要将非新实体的状态设置为“未更改”或“已修改”。“} IdentityUser固有的类 public class Customer : IdentityUser { public string CustomerProperty { get; set; } } public class Supplier : IdentityUser { public string SupplierProperty { get; set; } } 数据库上下文类 public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base(“ApplicationDbContext”) { Database.SetInitializer(new ApplicationDbInitializer()); } public DbSet CustomerCollection […]

指定密钥太长; 最大密钥长度为767字节Entity Framework 6中的Mysql错误

我已经开始使用visual studio 2012开发Asp.net Mvc-5应用程序了。所以我从nuget下载了Entity Framework-6和MySQL 6.8.3.0。 当我尝试使用db Context命令创建数据库时 dbContext.Database.CreateIfNotExists(); 抛出此exception。 指定密钥太长; 最大密钥长度为767字节 我已经对它进行了搜索,但找不到任何解决方案。 我在搜索过程中得到的一件事就是Unicode字符问题。 我不知道如何处理这个问题。 更新 我正在使用以下配置 我的数据库上下文类。 我已经删除了所有模型,只留下一个模型 public class MyContext : DbContext { public MyContext() : base(“myconn”) { this.Configuration.ValidateOnSaveEnabled = false; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); base.OnModelCreating(modelBuilder); } public DbSet ModelOne { get; set; } } 模特课 public class ModelOne […]

关系处于已删除状态

当我试图清除一个集合(调用.Clear )时,我得到以下exception: 保存不公开其关系的外键属性的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为exception的来源。 通过在实体类型中公开外键属性,可以更轻松地在保存时处理exception。 有关详细信息,请参阅InnerException。 内在的例外是: 来自’User_Availability’AssociationSet的关系处于’已删除’状态。 给定多重约束,相应的’User_Availability_Target’也必须处于’已删除’状态。 用户看起来像这样: …. ICollection Availability { get; set; } 可用性如下所示: int ID { get; set; } User User { get; set; } DateTime Start { get; set; DateTime End { get; set; } 配置如下: HasMany(x => x.Availability).WithRequired(x => x.User); HasRequired(x => x.User).WithMany(x => x.Availability); 导致问题的代码是: user.Availability.Clear(); 我已经看过其他替代方法,例如使用DbSet删除项目,但我觉得我的代码不会那么干净。 […]

EntityFramework 6.0 CreateDatabaseIfNotExists代码首先创建数据库

我究竟做错了什么。 我有一个用户DbContext设置和工作时,我最初使用powershell创建Code-First它一切正常。 我在应用程序启动时按预期实现了Database Initializer。 Database.SetInitializer(new CreateDatabaseIfNotExists()); 只是为了测试它是否真的创建了数据库我实际上删除了数据库,现在我被困住了数据库将不会被创建。 我正在使用SQL Server 2012,任何想法可能是错的。 我得到的错误信息是 System.InvalidOperationException: Migrations is enabled for context ‘UserDbContext’ but the database does not exist or contains no mapped tables. Use Migrations to create the database and its tables, for example by running the ‘Update-Database’ command from the Package Manager Console. 我从包管理器控制台尝试了相同的操作,它仍然给我相同的消息。

如何为Entity Framework CodeFirst迁移设置隔离级别

如果针对为SQL Server复制发布的表运行entity framework迁移(自动或显式),则会出现以下错误: 您只能在READ COMMITTED或REPEATABLE READ隔离级别中指定READPAST锁 之前( 此处 )存在一些问题,但它们完全无法解决根本原因: entity framework迁移在Serializable隔离级别运行 (如SQL Server分析器中清楚显示)。 对于结构更改事务,这是一个安全的选择,但它与发布的sql server表不兼容。 与dbContext.SaveChanges()事务中使用的默认READ COMMITED SNAPSHOT级别不同,我还没有找到一种方法来为代码中的迁移实际设置不同的隔离级别: 在Database.Initialize()期间似乎忽略了TransactionScope (设置事务隔离级别的经典方法Database.Initialize() 最近引入的Database.BeginTransaction(isolationLevel)实际上尝试在启动新事务之前初始化数据库,因此无法使用。 已知的解决方法 生成到SQL脚本的所有迁移。 这是有效的,但基于代码的迁移是一个我不想错过的强大工具。 使用显式迁移,并使用类似的方法启动每个Up()和Down()方法 Sql(“set transaction isolation level read committed”); 这很有效,但由于开发人员通常不使用复制数据库,因此不方便且容易出错。

lambda表达式使用select和where子句连接多个表

我有三个表多对多关系我已加入三个表并选择我想要的值但现在我需要从查询结果中选择一行通过指定id这是我的三个表 这是使用LINQ lambda表达式的查询: DataBaseContext db = new DataBaseContext(); public ActionResult Index() { var UserInRole = db.UserProfiles. Join(db.UsersInRoles, u => u.UserId, uir => uir.UserId, (u, uir) => new { u, uir }). Join(db.Roles, r => r.uir.RoleId, ro => ro.RoleId, (r, ro) => new { r, ro }) .Select(m => new AddUserToRole { UserName = mruUserName, RoleName […]

重新加载实体和所有导航属性关联 – DbSetentity framework

我有实体关联刷新的问题。 当我得到一个像这样的实体: MyContext context = new MyContext(); Person myPerson = context.PersonSet.FirstOrDefault(); String myPersonName = myPerson.Name; Address myPersonAddress = myPerson.Address; 我找到了一个名为Address的关联和名为Name的属性的人。 如果我手动修改数据库中的数据,例如属性Name,我必须使用以下代码重新加载我的实体: context.Entry(myPerson).Reload(); 我有Name的新值。 但是,如果我为地址做同样的事情,它就不起作用。 我认为这是因为地址是一个协会财产。 我需要刷新它。 如何强制重新加载Address关联(以及Person类中的所有其他关联)? 编辑: 在同一个案例中,一个人可以拥有多个地址。 MyContext context = new MyContext(); Person myPerson = context.PersonSet.FirstOrDefault(); String myPersonName = myPerson.Name; List myPersonAddresses = myPerson.Addresses; 在这种情况下,它不是参考: context.Entry(myPerson).Reference(p => p.Address).Load(); // Address will be populated […]

无法将类型’.List ‘隐式转换为’.List ‘

在以下代码中返回一个列表: public List GeAllCust() { var results = db.Customers .Select(x => new { x.CustName, x.CustEmail, x.CustAddress, x.CustContactNo }) .ToList() return results; } 我收到错误报告C#无法转换列表: 错误:无法将类型System.Collections.Generic.List隐式转换为System.Collections.Generic.List 这是为什么? 这是一个屏幕截图,显示了Visual Studio在错误的工具提示中提供的一些其他信息: 返回一些列而不是整个表是正确的方法….? public object GeAllCust() { var results = db.Customers.Select(x => new { x.CustName, x.CustEmail, x.CustAddress, x.CustContactNo }).ToList(); return results; }