Tag: entity framework

使用Reflection连接到实体模型

我正在编写一个小实用程序来从程序集中加载实体数据模型并对它们进行查询。 我已经尝试使用Reflection来加载派生的ObjectContext ,但是ObjectContext并不是从MarshalByRefObject派生的,所以我不能使用Activator.CreateInstance()将参数传递给构造函数(根据我得到的exception。) 是否可以使用Reflection加载定义并存储在外部程序集中的实体模型,“后绑定”到EDM,如果提供有效的连接字符串,则对其执行查询?

如何从Entity Framework Core中的DbContext获取列名和相应的数据库类型

假设我有这个表: 如何从Entity Framework Core中的DbContext获取列名和数据库数据类型? 提示 名为clg#的列由EF Core Scaffold工具转换为clg1,因此我需要真正的列名而不是当前的EF名称 我需要数据库类型,而不是clrType,当然必须是跨平台。 也许我会改变数据库,所以方法也必须工作。 期望的结果: 谁能提供解决方案?

如何在Entity Framework上处理UpdateException – “违反PRIMARY KEY约束”?

我有一个允许多个用户的应用程序和一个具有2个ID作为复合键的数据库表。 这些ID也是来自另一个表的外键。 因此,当2个用户尝试使用相同的ID向此tabel添加条目时,由于主键违反规则,其中一个用户会获得UpdateException。 我已经发现它应该像这样处理: try { result = base.SaveChanges(options); } catch (UpdateException ex) { SqlException innerException = ex.InnerException as SqlException; if (innerException != null && innerException.Number == 2627 || innerException.Number == 2601) { // handle here } else { throw; } } 但是我在“// Handle here”部分实际上做了什么。 我尝试刷新对象,但它处于“已添加”状态,因此无法刷新。 我要做的是:确认已经存在具有这些ID的对象,删除它想要插入的对象并从数据库加载现有对象。 我怎样才能做到这一点?

如何将SQL连接字符串与ADO.NET实体数据模型一起使用

我试图以一种方式使用ADO.NET实体数据模型,我可以随时更改我指向的数据库。 更改数据库可能需要一个全新的连接字符串。 某些数据库位于不同的服务器上 所以我需要能够传递我的ADO.NET实体数据模型一个自定义连接字符串,如’server = severaddress; database = database1; User ID = test; Password = test1234;’ 编辑:我的实体类实现了ObjectContext。 我可以使用的三个构造函数是默认的,传入connectionString,传入EntityConnection。 当我使用重载构造函数时,我会收到错误,说它无法识别connectionstring中的“server”。 我需要使用自定义连接字符串实例化我的存储库,或者能够在使用前设置它。

实体的IQueryable .Where(属性在本地数组中)

所以我知道iQueryables被翻译成SQL语句,因此无法处理你可能放入where子句的所有可能的方法。 但这就是我要做的事情: int[] alreadySelectedIds = … var subjects = Entities.NewInstance.Subjects.Where(x => Array.IndexOf(alreadySelectedIds, x.Id) == -1).ToList(); 阅读下面的post,我很高兴EF5应该能够翻译这个。 获取其键匹配id列表(或数组)的实体 使用LINQ从数组查询Int ID 但是,我收到此错误: LINQ to Entities无法识别方法’Int32 IndexOf [Int32](Int32 [],Int32)’方法,并且此方法无法转换为存储表达式。 谷歌搜索这个错误并没有给我太多帮助。 我也试过了 var newSubjects = Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList(); 无法创建类型为“System.Int32 []”的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 和 List alreadySelectedIds = … 无法创建类型为’System.Collections.Generic.List`1’的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 我被困住了,我的大脑变得糊涂,超出了任何类型的优雅康复的可能性。 有人可以救我吗?

如何将OData键值添加到Entity Framework类?

我正在使用MVC 5,Microsoft OData 2.1和Entity Framework 6.我正在尝试使用我使用EntitySetController类编写的OData源。 当我添加服务引用并消耗OData元数据时,它可以看到我的资源,但是当我尝试保存它时,我收到一个错误: 自定义工具“DataServicesCoreClientGenerator”失败。 数据服务客户端代码生成失败:指定的架构无效。 错误:(0,0):错误0159:实体’…’没有定义键。 定义此EntityType的键..# 我的OData元数据如下所示: 我尝试使用以下代码将[Key]属性添加到vApplication类: [MetadataType(typeof(vApplicationKey))] public partial class vApplication { } public class vApplicationKey { [Key] public System.Guid ApplicationId { get; set; } } 但这不会改变我的元数据,错误仍然存​​在。 EDMX模型中的实体键设置为ApplicationId。 这似乎也不会影响元数据。 如何获取元数据以生成具有实体键的模式,以便我可以使用服务引用在C#中使用它? PS我正在消费观点。 当我直接使用表时,它似乎有效。 那么如何让它与Views一起使用呢?

EF6中的唯一索引约定

如何为不同类型的索引创建自定义索引和键约定。 我需要为以下键或索引类型命名不同的命名: PK_TableName主键 外键的FK_SourceTable_Column_TargetTable IX_TableName_Column1_Column2非唯一索引 UX_TableName_Column1_Column2唯一索引 默认情况下,Entity Framework使用以下命名: 主键的PK_ schemaname .TableName 外键的FK_ schemaname .SourceTable_ schemaname .TargetTable_Column1 IX_Column1表示非唯一索引 ColumnName为唯一索引 我发现我可以实现IStoreModelConvention ,但我还没有找到特定类型作为类型参数。 此外,可以有自定义代码优先约定 ,但我的研究结束时没有结果。 当我使用Entity Framework Code First时,如何才能获得提及的命名规则? 它可以是任何东西:包装,样品或以下研究的方向。

我可以将2个不同的EntityFramework上下文共享一个SqlServer Compact数据库吗?

我有一个包含2个表的SqlServer Compact Edition数据库。 对于这些表中的每一个,我都有一个派生自DbContext的上下文类,应用程序使用它来访问该表。 为了保持应用程序的不同组件分离,我不能有一个上下文类,它将具有两个表的DbSet属性。 相反,我需要有两个不同的上下文类,每个上下文必须完全不知道另一个及其数据。 我正在使用代码优先方法,我的代码定义了实体和模型,我让Entity Framework为我创建数据库。 我的问题是:我怎样才能让Entity Framework在上下文初始化时自动为我创建数据库和表,但仍然有2个上下文共享相同的数据库和连接? 现在我得到的是,第一个上下文成功创建了数据库及其中的表,但是当我尝试创建第二个上下文时,我得到了,不出所料的是以下错误: The model backing the ‘SomeObjectContext’ context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance. For example, the DropCreateDatabaseIfModelChanges strategy will automatically delete and recreate the database, and optionally seed it with new data. […]

操作失败:无法更改关系,因为一个或多个外键属性不可为空

这些是我的实体: public class Currency : Exchange { public List CurrencyPrice { get; set; } } public class CurrencyPrice : Price { public int CurrencyId { get; set; } [ForeignKey(“CurrencyId”)] public Currency Currency { get; set; } } 我第一次将值插入数据库时​​一切正常,但如果我更改数据库中的任何值并尝试插入或更新记录,我会收到此错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。 这是我的插入代码: var currency = UnitOfWork.Exchange.Get(x => x is Currency && x.ExchangeType.Id == exchangeTypeId) as […]

为什么我们需要将类库项目inheritance的程序集的引用添加到使用者项目中?

我的解决方案包括两个项目: 一个类库项目(名为DataAccess ),它定义了一个inheritance自DbContext的类(名为MyContext )。 由于在EntityFramework.dll程序DbContext定义了DbContext ,我需要将此程序集的引用添加到此类库项目中。 我对这个机制没有任何困惑。 一个控制台应用程序项目(名为Tester ),它使用DataAccess类库中定义的DataAccess类。 添加对上面类库的程序集的引用是可以理解的。 不幸的是,在我将EntityFramework.dll的引用添加到此控制台应用程序之前,我无法编译解决方案。 为什么我们需要将类库项目inheritance的程序集的引用添加到使用者项目中? 在我的心智模型中,仅将DataAccess项目程序集的引用添加到Tester项目中就足够了,链接引用应该自动完成。