Tag: ef code first

如何在Code First中指定数据库名称?

我如何告诉EF如何命名数据库以及将其放在哪里? 如果Web.Config中没有连接string,它会尝试将其放入本地SQLEXPRESS服务器,但是我想将它放在已知的SQL Server上,并将其命名为我想要的名称。 有什么build议么?

entity framework查询速度慢,但SqlQuery中的相同的SQL很快

我看到一些非常简单的查询使用entity framework代码优先与.NET框架版本4一些非常奇怪的性能。LINQ2Entities查询如下所示: context.MyTables.Where(m => m.SomeStringProp == stringVar); 这需要超过3000毫秒的时间来执行。 生成的SQL看起来很简单: SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp], … FROM [MyTable] as [Extent1] WHERE [Extent1].[SomeStringProp] = '1234567890' 此查询在运行Management Studio时几乎可以即时运行。 当我更改C#代码以使用SqlQuery函数时,它运行5-10毫秒: context.MyTables.SqlQuery("SELECT [Extent1].[ID] … WHERE [Extent1].[SomeStringProp] = @param", stringVar); 因此,完全相同的SQL,所得到的实体在两种情况下都被更改跟踪,但是两者之间的性能差异很大。 是什么赋予了?

如何使用Entity Framework Code First Fluent API指定表名

我有一个实体,我将configurationentity framework将其映射到具有不同名称的数据库表。 我可以用Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute )轻松做到这一点。 但由于现在的限制,我必须使用Code First Fluent API (我的域对象将被外部客户端使用,所以它们不应该是特定于技术的 – 例如对DataAnnotations有任何引用) 我在MSDN上search,但没有发现。 那么这是可能的和如何? 谢谢。

如何在EF代码中禁用级联删除链接表?

我想要使​​用entity frameworkcode-first禁用级联删除链接表。 例如,如果许多用户有很多angular色,并且我试图删除一个angular色,我希望该删除被阻止, 除非当前没有用户与该angular色关联。 我已经删除了我的OnModelCreating中的级联删除约定: protected override void OnModelCreating(DbModelBuilder modelBuilder) { … modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 然后我设置了用户angular色链接表: modelBuilder.Entity<User>() .HasMany(usr => usr.Roles) .WithMany(role => role.Users) .Map(m => { m.ToTable("UsersRoles"); m.MapLeftKey("UserId"); m.MapRightKey("RoleId"); }); 然而,当EF创build数据库时,它会为外键关系创build一个删除级联,例如。 ALTER TABLE [dbo].[UsersRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersRoles_dbo.User_UserId] FOREIGN KEY([UserId]) REFERENCES [dbo].[User] ([UserId]) ON DELETE CASCADE GO ALTER TABLE [dbo].[UsersRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersRoles_dbo.Role_RoleId] FOREIGN […]

针对传统数据库的CodeFirst EF4.1 MVC – 多重性冲突

不pipe我把它混在一起,它给我错误。 我有一种感觉,我失去了一些明显的东西,因为我不断收到这些错误。 在模型生成期间检测到一个或多个validation错误: System.Data.Edm.EdmAssociationType::多重性与“Venue_Courses”关系中angular色“Venue_Courses_Source”中的参照约束冲突。 由于从属angular色中的所有属性都是不可空的,所以主体angular色的多重性必须为“1”。 System.Data.Edm.EdmAssociationEnd::多重性在“Venue_Courses”关系中的“Venue_Courses_Target”angular色中无效。 因为依赖angular色是指关键属性,所以依赖angular色的多重性的上界必须是1。 一个课程只能有一个场地,场地可以被很多课程使用 public class Course { [Key] public virtual int Id { get; set; } public string Title { get; set; } public DateTime StartDate { get; set; } public int VenueId { get; set; } public virtual Venue Venue { get; set; } } public class Venue { […]

嘲笑或伪造DbEntityEntry或创build一个新的DbEntityEntry

继我的另一个关于嘲笑DbContext的问题之后。我还有一个关于嘲笑EF Code First的问题。 我现在有一个我的更新的方法如下所示: if (entity == null) throw new ArgumentNullException("entity"); Context.GetIDbSet<T>().Attach(entity); Context.Entry(entity).State = EntityState.Modified; Context.CommitChanges(); return entity; 上下文是我自己的DbContext的一个接口。 我正在跑的问题是,我该如何处理 Context.Entry(entity).State 。 我已经介绍了这个代码,当我有一个真正的DbContext作为我的Context接口的实现时,它就起作用了。 但是当我把虚假的背景放在那里时,我不知道如何处理它。 DbEntityEntry类没有构造函数,所以我不能只在我的假上下文中创build一个新的构造函数。 有没有人在CodeFirst解决scheme中嘲笑或伪造DbEntityEntry? 还是有更好的方法来处理状态变化?

EF代码优先:如何获得随机行

我怎样才能build立一个查询,我会检索随机行? 如果我在SQL中编写它,那么我将在newid()上放置一个命令,并从顶部砍掉n个行。 无论如何要在EF代码中做到这一点? 我已经尝试创build一个使用newid()并使用DbSet.SqlQuery()执行它的查询。 虽然它的工作,它不是最干净的解决scheme。 另外,试着检索所有的行,并通过一个新的GUIDsorting。 尽pipe行数相当小,但它仍然不是一个好的解决scheme。 有任何想法吗?

entity framework存储过程表值参数

我试图调用一个接受表值参数的存储过程。 我知道,这不是直接支持在entity framework,但从我的理解,你可以使用ExecuteStoreQuery命令closures的ObjectContext 。 我有一个通用的entity framework库,我有以下ExecuteStoredProcedure方法: public IEnumerable<T> ExecuteStoredProcedure<T>(string procedureName, params object[] parameters) { StringBuilder command = new StringBuilder(); command.Append("EXEC "); command.Append(procedureName); command.Append(" "); // Add a placeholder for each parameter passed in for (int i = 0; i < parameters.Length; i++) { if (i > 0) command.Append(","); command.Append("{" + i + "}"); } return […]

应用程序configuration文件中的连接string“MyConnection”不包含所需的providerName属性。

我使用Entity Framework Code First , 我的连接string在configuration文件中: <connectionStrings> <clear/> <add name="ApplicationServices" connectionString="Data Source=PC-X;Initial Catalog=MYdb;Integrated Security=True"/> </connectionStrings> 当我尝试访问数据(应该创build数据库的东西)正在下降,出现以下错误: The connection string 'ApplicationServices' in the application's configuration file does not contain the required providerName attribute." 我错过了什么?

多对多的映射表

从我在网上看到的例子和编程entity frameworkCodeFirst的书中,当你在两个类上都有一个集合时,EF会创build一个映射表,比如MembersRecipes ,每个类的主键都会链接到这个表。 然而,当我做下面,我反而在Recipes表中的Members表中称为Member_Id和Recipe_Id一个新的领域。 这只会创build两个一对多的关系,但不是一个多对多的,所以我可以有成员3链接到食谱(4,5,6)和链接到成员(1,2,3)等4食谱 有没有办法创build这个映射表? 如果是这样的话,你怎么把它叫做“食谱”呢? 谢谢 public abstract class Entity { [Required] public int Id { get; set; } } public class Member : Entity { [Required] public string Name { get; set; } public virtual IList<Recipe> Recipes { get; set; } } public class Recipe : Entity { [Required] public string Name […]