Tag: entity framework 5

entity framework5 – 基于枚举的派生类的判别器

我有以下内容(为了清楚起见,缩写) – 一个枚举,一个带有该枚举的基类,以及两个将枚举设置为特定值的派生类。 public enum MyEnum { Value1, Value2 } public class MyBaseClass { public MyEnum { get; protected set; } } public class DerivedOne: MyBaseClass { public DerivedOne { MyEnum = MyEnum.Value1; } } public class DerivedTwo: MyBaseClass { public DerivedTwo { MyEnum = MyEnum.Value2; } } 我想要做的是让Entity Framework 5自动区分DerivedOne和DerivedTwo, 并使用基于MyEnum值的鉴别器 。 我应该能够这样做,按照惯例,每个MyEnum == […]

entity frameworkAsNoTracking中断了对Distinct的调用

我正在尝试从以前加载的页面上的产品列表中加载不同颜色的列表。 所以我要这样做: var products = Products .Include(p => p.ProductColor) .ToList(); 然后我对产品进行一些处理我想得到产品使用的所有不同颜色的列表,所以我这样做: var colors = products .Select(p => p.ProductColor) .Distinct(); 这非常.AsNoTracking() ,但是如果我将.AsNoTracking()的调用添加到原始产品调用中,我现在会在产品列表中的每个条目的颜色列表中获得一个条目。 为什么这两个有区别? 有没有办法让Entity Framework不跟踪对象(它们被用于只读)并获得所需的行为? 将调用添加到AsNoTracking()后,这是我的查询 var products = Products .AsNoTracking() .Include(p => p.ProductColor) .ToList();

NerdDinner MVC4版本 – 为什么他们删除了存储库类?

我一直在查看NerdDinner教程。 我正在阅读使用LINQ to SQL和MVC2的原始PDF教程( http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf )。 在该教程中,他们实现数据上下文,然后实现存储库类以与数据实体交互。 我看到项目已更新为使用MVC4和entity framework( http://nerddinner.codeplex.com ),因此我浏览了该代码以查看它们实现了哪些更改。 他们将项目更改为代码优先,每个数据实体都有单独的模型类。 我惊讶地发现他们完全摆脱了存储库。 我认为通过存储库模式抽象与数据库的通信通常是一种很好的做法…我知道教程通常会为了简洁而做出糟糕的设计选择,但我想知道为什么已经实现了存储库的教程做出了决定从这个版本中省略它们。 MVC4或EF中是否存在使存储库过时/冗余的问题?

具有entity framework代码的XML字段优先

我正在使用Entity Framework和Code First模型(宠物项目,我喜欢编辑简单的类并自动更新我的模式)。 我有一个类如下: [Table(“Polygons”)] public class Polygon { public int PolygonId { get; set; } public String Texture { get; set; } public virtual ICollection Points { get; set; } } [Table(“Points”)] public class Point { public int PolygonId { get; set; } public double X { get; set; } public double Y { […]

使用Entity Framework 5在SQL Server中连接字符串和数字的最佳方法?

出于某种原因,微软决定不支持EF5中的简单连接。 例如 Select(foo => new { someProp = “hello” + foo.id + “/” + foo.bar } 如果foo.id或foo.bar是数字,这将抛出。 我发现的解决方法显然是代码: Select(foo => new { someProp = “hello” + SqlFunctions.StringConvert((double?)foo.id).Trim() + “/” + SqlFunctions.StringConvert((double?)foo.bar).Trim() } 哪个工作正常,但看起来很可怕。 那么,有更好的方法来实现这个更清洁的代码吗? 我对这个客户端不感兴趣,所以没有.AsEnumerable()请回答。

数据绑定linq查询到Entity Framework 5.0中的datagridView

我正在学习entity framework(5.0和VSExpress 2012),我在将查询绑定到WinForms中的dataGridView时遇到了麻烦。 我有以下代码,当我启动应用程序时它显示我的查询,但我不知道在更改底层数据库中的数据后我需要做什么来更新dataGridView。 这样做的最佳方法是什么? 我在这做错了什么? private void Form1_Load(object sender, EventArgs e) { using( var ctx = new TimeKeepEntities()) { var qLoggedIn = from r in ctx.tblTimeRecords where (r.tblEmployee.Active && !r.ClockOut.HasValue) || System.Data.Objects.EntityFunctions.DiffDays(r.ClockOut, DateTime.Now)<30 select new { Name = r.tblEmployee.Last + ", " + r.tblEmployee.First, r.tblProject.ProjName, r.ClockIn, r.ClockOut }; dataGridView1.DataSource = qLoggedIn.ToList(); } }

EF5,SQL Server,经度和纬度

我发现在SQL Server中存储lat和long的最佳类型是decimal(9,6)(ref。 在SQL数据库中存储纬度和经度数据时使用什么数据类型? )所以我做了 AddColumn(“dbo.Table”, “Latitude”, c => c.Decimal(nullable: false, precision: 9, scale: 6)); AddColumn(“dbo.Table”, “Longitude”, c => c.Decimal(nullable: false, precision: 9, scale: 6)); SQL似乎没问题,一切正常,但是当我插入/更新一个值时,即 lat = 44.5912853 它像这样保存: 44.590000 我检查了流程,就在更新之前,我的实体包含正确的值,所以我认为不是与我的代码相关,而是与EF / SQL的一些相关。 你有什么想法可以避免这种情况吗? UPDATE update [dbo].[Breweries] set [RankId] = @0, [Name] = @1, [Foundation] = null, [DirectSale] = @2, [OnlineSale] = @3, [StreetAddress] = […]

EntityType’DbGeography’没有定义键

长时间听众,第一次来电(终于在这里开了帐户!)…… 我正在使用Visual Studio 2013与.NET 4.5.1和entity framework6 (最终版本,而不是RC或beta)。 在尝试向我的实体添加DbGeography属性时,执行时出现此错误: One or more validation errors were detected during model generation: Geocoder.DbGeography: : EntityType ‘DbGeography’ has no key defined. Define the key for this EntityType. DbGeographies: EntityType: EntitySet ‘DbGeographies’ is based on type ‘DbGeography’ that has no keys defined. 我已经确认我没有引用旧版本的Entity Framework( 这里讨论过 )。 我一直在使用这篇文章和这篇MSDN文章中的示例/信息,因为这是我第一次涉及.NET中的空间类型(以及SQL Server,就此而言)。 这是我的实体: public class […]

Entity Framework 5.0 PostgreSQL(Npgsql)默认连接工厂

我试图让EF 5.0代码首先使用PostgreSQL(Npgsql提供程序)。 我通过NuGet安装了Npgsql 2.0.12.1(但引用的程序集是2.0.12.0)。 我在app.config中声明了Npgsql(默认连接工厂和提供者工厂): 我有以下测试成功运行: [Test] public void DatabaseConnection_DatabaseFactoryTest() { var factory = DbProviderFactories.GetFactory(“Npgsql”); var conn = factory.CreateConnection(); conn.ConnectionString = _connectionString; var npg = (NpgsqlConnection)conn; var result = TestConnectionHelper(npg); // scalar select version(), nothing particular Assert.AreEqual(result, “PostgreSQL 9.2.2, compiled by Visual C++ build 1600, 64-bit”); } 这意味着至少数据库实例正在运行且提供程序已成功配置。 现在我想要的是使用从DbContextinheritance的自定义数据库上下文,它将绑定到同一个提供程序并通过连接字符串初始化: public class InventoryContext : DbContext { […]

代码优先:将实体映射到现有数据库表

我使用entity framework6代码优先与现有数据库,但在将我的实体映射到数据库表时遇到问题。 通常,我会使用数据库优先方法并生成我的实体和上下文代码,但使用设计器已经成为一个巨大的痛苦。 我已经设置了Database.SetInitializer(null),因为我不希望EF更改我的架构。 数据库架构: 守则一: public class Project { public int ProjectId { get; set; } public string Name { get; set; } public string Description { get; set; } } public class ReleaseControlContext : DbContext { public ReleaseControlContext() : base(ConfigurationManager.ConnectionStrings[“ReleaseControl”].ConnectionString) { Database.SetInitializer(null); } public DbSet Projects { get; set; } } 调用代码: using(var […]