Tag: entity framework

AddOrUpdate工作不符合预期,并产生重复

我正在使用基于Code-First DBContext的EF5设置。 在DbMigrationsConfiguration.Seed我试图用默认的虚拟数据填充DB。 要完成此任务,我使用DbSet.AddOrUpdate方法。 最简单的代码来说明我的目标: j = 0; var cities = new[] { “Berlin”, “Vienna”, “London”, “Bristol”, “Rome”, “Stockholm”, “Oslo”, “Helsinki”, “Amsterdam”, “Dublin” }; var cityObjects = new City[cities.Length]; foreach (string c in cities) { int id = r.NextDouble() > 0.5 ? 0 : 1; var city = new City { Id = j, Name […]

Generic Linq to Entitiesfilter方法,它接受要过滤的过滤条件和属性

我已经在SO中查看了许多通用的linq过滤问题及其答案,但它们都没有满足我的需求,所以我想我应该创建一个问题。 我已经创建了许多我称之为“filter提供程序”的类,一个用于我的模型中的每个实体类,以便为我的应用程序提供简单的搜索。 我不想进入像Lucene.Net这样的更高级的解决方案,因为具有匹配分数的基本过滤就足够了。 在这些提供者类的每个提供者类中,有多种方法将接收过滤术语和查询特定属性,并根据属性的相关性返回每个匹配的分数。 大多数方法会一次过滤多个属性,但不是全部。 以下是其中两种方法: private IQueryable MatchHighRelevanceFields(string searchTerm, IQueryable retailers) { var results = retailers.Where(r => (r.CompanyName != null && r.CompanyName.ToUpper().Contains(searchTerm)) || (r.TradingName != null && r.TradingName.ToUpper().Contains(searchTerm)) ); return results; } private IQueryable MatchMediumRelevanceFields(string searchTerm, IQueryable retailers) { var results = retailers.Where(r => (r.Address.Street != null && r.Address.Street.ToUpper().Contains(searchTerm)) || (r.Address.Complement != null && […]

获取程序集中的类型(错误:System.Reflection.ReflectionTypeLoadException)

我收到类型exception“Exception Details:System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型。检索LoaderExceptions属性以获取更多信息。” 使用以下代码: public IEnumerable FindClassesOfType(Type assignTypeFrom, IEnumerable assemblies, bool onlyConcreteClasses = true) { foreach(var a in assemblies) { foreach (var t in a.GetTypes()) 我需要获取每个程序集中定义的类型,但似乎无法生成它。 我已经通过删除dll,清理解决方案,重新加载解决方案等执行了与错误的程序集创建相关的所有典型过程,但没有发生任何事情。 我想请求想法,以通过找到一种方法来检索错误的更多信息,或者找到组件产生问题或类似的东西来解决这个问题。 当前的exception消息是如此模糊,以至于意识到哪个是问题。 非常感谢。 ps:附加信息,当我运行重建操作时,所有进程都正确生成且没有错误。

将多个数据库与单个DbContext和Entites一起使用,并在运行时生成Conn String

我正在开发一个MVC 5应用程序。 最初我使用单一数据库和EF6 DataBase第一种方法,我使用我的DbContext实例来访问我的数据库,它有102个表。 我将其实例声明为: private MyEntities db = new MyEntities(); 现在我想允许多家公司使用我的应用程序,为此我必须为每个新公司创建一个新的数据库。 我通过向DbContext声明另一个构造函数来实现此目的,如下所示: public partial class NewEntities : DbContext { public NewEntities(string name) : base(name) { } } 然后将其实例声明为: public NewEntities de = new NewEntities((ConfigurationManager.ConnectionStrings[“NewEntities123”]).ToString()); 然后我打电话 db.Database.Create(); 我的新数据库已成功创建。 但是在这个方案中,每次我想添加数据库时,我都必须在我的Web.config文件中声明一个新的连接字符串。 是否有任何方法根据配置文件中的公司名称自动生成连接字符串,然后传递给构造函数以创建具有该名称的新数据库? 此外,我想为每个公司使用相同的“db”实例和DbContext访问我的所有控制器方法,以便我的相同代码可以用于所有公司。 如何为多个数据库访问单个DbContext及其实例? 我已经看过这个答案,因为它说没有方法。 但那么我的应用程序如何适用于多个用户?

entity framework中的并发exception

在Entity Framework(CF,C#)中调用SaveChanges / SaveChangesAsync时,如果发生更改冲突(例如,自上次读取之后值已更新),那么我应该捕获这两个exception中的DbUpdateConcurrencyException或OptimisticConcurrencyException ? 它们之间有什么区别?

使用LINQ选择最常用的值

我正在尝试在表中选择前五个最常用的值并将它们返回到List中。 var mostFollowedQuestions = (from q in context.UserIsFollowingQuestion select *top five occuring values from q.QuestionId*).toList(); 任何的想法? 谢谢

LINQ to Entities无法识别方法’System.Linq.IQueryable`

我想运行这个LINQ简单代码在LINQ中有记录号,但结果是错误的 var model = _db2.Persons.Select( (x, index) => new { rn = index + 1, col1 = x.Id }).ToList(); 错误: LINQ to Entities无法识别方法’System.Linq.IQueryable 1[f__AnonymousType2 2 [System.Int32,System.Int32]]选择[Person, f__AnonymousType2 2](System.Linq.IQueryable 1 [MvcApplication27.Models] .Person],System.Linq.Expressions.Expression 1[System.Func 3 [MvcApplication27.Models.Person,System.Int32, f__AnonymousType2`2 [System.Int32,System.Int32]]])’方法,这个方法无法转换为商店表达式。

使用LINQ to Entities(entity framework)比较日期

我需要从我的数据库中返回一个项目列表,该列表在项目提供的日期的预定时间到期。 我的错误代码如下: return All().Where(o => new DateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now) 我得到的错误是: LINQ to Entities中仅支持无参数构造函数和初始值设定项 有谁知道我怎么解决这个问题?

Sequence不包含匹配元素 – EntityFramework

我正在使用EF 6.1.0并正在创建WCF服务。 首先,我创建了一个包含我的实体,Mappers和Context的类库,用于初始化EF。 我还创建了一个包含上下文实例的类,并具有以下代码: public IQueryable GetAll() { return context.[Entity].AsQueryable(); } 另一方面,我在同一个项目上创建了一个WCF服务,并在.svc文件中调用函数GetAll(),如下所示: public List GetList() { [iObject] repository = new [Object](new Context()); return repository.GetAll().ToList(); } 该项目正在建设中。 我甚至检查了配置,它位于正确的数据库中。 但是,应该创建的数据库和表不存在,并且返回中显示错误“Sequence contains no matching element”。 如果这个令人困惑,您可以使用Code First Entity Framework向我指出WCF服务的一些链接。

没有数据库提供程序配置EF7

使用Entity Framework 7和MVC6时,我似乎收到此错误消息 System.InvalidOperationException未配置任何数据库提供程序。 在设置服务时,通过在DbContext类或AddDbContext方法中覆盖OnConfiguring来配置数据库提供程序。 我相信我已经做了我应该做的一切,所以也许它是一个错误。 我使用的是Entity Framework的7.0.0-beta7版本。 我已经设置了我的DbContext,一个接口,所以我可以模拟DbContext(在EntityFramework 6中需要进行unit testing)。 我的服务将接口作为构造函数,我在MVC 6中设置了DI。 在我的Startup.cs文件中,我有以下内容 public void ConfigureServices(IServiceCollection services) { // entity framework services.AddEntityFramework() .AddSqlServer() .AddDbContext(options => options.UseSqlServer(Configuration[“Data:MyConnection:ConnectionString”]) ); // Add MVC services to the services container. services.AddMvc(); // new context on each request services.AddScoped(); } 我已经检查了我的connectionString,并且返回了一个有效的连接。 我还检查了我的服务,正在注入该对象,并且它不是null,因此应该全部工作。 我的config.json文件看起来像这样 { “Data”: { “MyConnection”: { “ConnectionString”: “Server=(local);Database=XXXX;Trusted_Connection=True;” […]