Tag: entity framework

删除级联的entity framework

我在删除Entity Framework 4.1中的相关行时遇到问题。 我有关系表 书1 * BookFormats 我已经设置了删除级联: ALTER TABLE [dbo].[BookFormats] WITH CHECK ADD CONSTRAINT [FK_BookFormats_Book] FOREIGN KEY([BookID]) REFERENCES [dbo].[Book] ([BookID]) on delete cascade EDMX属性 然后,我想删除与我的Book对象相关的所有BokFormats项: var originalBook = m.db.Book.First(x => x.BookID == bookId); originalBook.BookFormats.Clear(); m.db.SaveChanges(); 但是,我得到错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。 我没有关于如何删除这些对象的想法。 有任何想法吗?

entity framework6异步操作和TranscationScope

我在stackoverflow上搜索但找不到类似的问题,请指出我是否已经有一个问题。 我试图用同步和异步操作实现一个通用的可重用存储库,但是我对entity framework和工作单元的了解很少,我很难找到实现它的正确方法。 我在SaveAndCommit操作中添加了一些变体,但不知道使用事务和异步执行此操作的最佳方法是什么。 – – 编辑 – – 根据我的理解,当执行多个操作时应该使用事务,但出于理解的目的,我将它用于一个操作。 (如果我错了,请纠正我) 这是我到目前为止所做的 public class Service : IService where TEntity : Entity { #region Constructor and Properties UnitOfWork _unitOfWork { get { return UnitOfWork.UnitOfWorkPerHttpRequest; } } protected DbSet Entities { get { return _unitOfWork.Set(); } } #endregion Constructor and Properties #region Operations public virtual IQueryable QueryableEntities() […]

LINQ to Entities的例外不支持继续获取’LINQ表达式节点类型’调用’

我正在使用C#(包括Linq)来开发Web应用程序。 我编写了一个generics方法来扩展任何实体的Get方法。 但是当我得到运行时exception时,执行代码时,“LINQ to Entities”不支持LINQ表达式节点类型“Invoke”。 以下是代码: using System.Linq; using System.Linq.Expressions; using LinqKit; public static class ServiceExtension { public static IEnumerable GetActive(this ICrudService crudService, Expression<Func> where) where T : class, IDeletable { return crudService.Get(where.And(w => !w.IsDeleted)); } } 有人可以告诉我我做错了什么吗?

你如何“真正”使用Newtonsoft.Json序列化循环引用对象?

我在使用Newtonsoft.Json从我的ASP.NET Web API控制器正确地序列化数据时遇到问题。 这就是我的想法 – 如果我错了,请纠正我。 在某些情况下(特别是当数据中没有任何循环引用时)一切都像您期望的那样工作 – 填充对象列表被序列化并返回。 如果我在模型中引入导致循环引用的数据(如下所述,甚至设置了PreserveReferencesHandling.Objects ),则只有通过循环引用导致第一个对象的列表元素才能以客户端可以“序列化”的方式进行序列化。与“合作”。 如果在将数据发送到序列化程序之前以不同方式排序,则“导致数据”的元素可以是数据中的任何元素,但至少有一个元素将以客户端可以“使用”的方式进行序列化。 空对象最终被序列化为Newtonsoft引用( {$ref:X} )。 例如,如果我有一个EF模型,其导航属性如下所示: 在我的global.asax中: var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 这是我使用Entity Framework进行的基本查询(延迟加载已关闭,因此这里没有任何代理类): [HttpGet] [Route(“starting”)] public IEnumerable GetStartingBalances() { using (MyContext db = new MyContext()) { var data = db.Balances .Include(x => x.Source) .Include(x => x.Place) .ToList() return data; } } 到目前为止一直很好, […]

动态包含在查询中急切加载的语句 – EF 4.3.1

我有这个方法: public CampaignCreative GetCampaignCreativeById(int id) { using (var db = GetContext()) { return db.CampaignCreatives .Include(“Placement”) .Include(“CreativeType”) .Include(“Campaign”) .Include(“Campaign.Handshake”) .Include(“Campaign.Handshake.Agency”) .Include(“Campaign.Product”) .AsNoTracking() .Where(x => x.Id.Equals(id)).FirstOrDefault(); } } 我想列出包含动态的列表。 我试过了: public CampaignCreative GetCampaignCreativeById(int id, string[] includes) { using (var db = GetContext()) { var query = db.CampaignCreatives; foreach (string include in includes) { query = query.Include(include); } […]

通过Entity Framework将表值类型传递给SQL Server存储过程

我在SQL Server中创建了一个用户定义的表类型: CREATE TYPE dbo.TestType AS TABLE ( ColumnA int, ColumnB nvarchar(500) ) 我正在使用存储过程将记录插入数据库: create procedure [dbo].[sp_Test_CustomType] @testing TestType READONLY as insert into [dbo].[myTable] select ColumnA, ColumnB from @testing 我想使用EF来执行此存储过程,但问题是:如何将用户定义的表传递给存储过程? 我尝试将存储过程添加到模型中,但我无法在更新的上下文中找到所需的存储过程。 我要做的是对表执行批量插入,这是我目前使用的方法: List itemToInsertToDB = //fetchItems; foreach(items i in itemToInsertToDB) { context.sp_InsertToTable(i.ColumnA, i.ColumnB) } 目前,我使用foreach循环遍历列表以将项目插入到DB,但如果列表中有很多项目,那么就会出现性能问题,因此,我正在考虑将列表传递给存储过程并在里面插入。 那么如何解决这个问题呢? 或者有更好的方法吗?

SelectMany()无法推断类型参数 – 为什么不呢?

我有一个Employee表和一个Office表。 它们通过EmployeeOffices表以多对多关系连接EmployeeOffices 。 我想获得一个特定员工( CurrentEmployee )与之关联的所有办公室的列表。 我以为我可以这样做: foreach (var office in CurrentEmployee.EmployeeOffices.SelectMany(eo => eo.Office)) ; 但这给了我错误: 无法从用法中推断出方法’System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.Func>)’的类型参数。 尝试显式指定类型参数。 我知道我可以添加类型参数。 但Intellisense认识到eo.Office属于Office类型。 那么编译器为什么不清楚呢?

在尝试解析列以进行不等式比较时,LINQ to Entities无法识别方法’Int32 Parse(System.String)’方法

我的页面中有以下代码: var myVar= Entity.SetName .Where(p => int.Parse(p.ID) >= start && int.Parse(p.ID) <= end); start和end是int,但p.ID是string。 所以我应该将p.ID转换为int。 但我得到以下错误: LINQ to Entities无法识别方法’Int32 Parse(System.String)’方法,并且此方法无法转换为存储表达式。 问题出在哪儿??

entity framework4.3 – TPH映射和迁移错误

我正在使用Entity Framework 4.3,首先是代码迁移和手动迁移。 我正在尝试映射使用两个自定义鉴别器字段的TPH(每层次表)设置。 一个用于鉴别器本身,另一个用于软删除(很像NH类映射中的“where”选项)。 完全相同的设置在另一个在EF 4.2上运行的项目中运行正常。 尝试使用NuGet控制台中的“add-migration”命令添加迁移时出现错误。 我已经尝试了定义表名的所有组合 – 类的属性,“OnModelCreating”方法,EntityTypeConfiguration类等。我以前的迁移不涉及复杂的层次结构映射已经正常工作。 我偶然发现了EF 4.3中的一些重大变化吗? 代码: //—- Domain classes ——————— public abstract class ParentClass { public string ParentString { get; set; } } public class Foo : ParentClass { public string FooString { get; set; } } public class Bar : ParentClass { public string BarString { […]

entity framework中的“数据读取器具有多个字段”错误

我正在使用Entity Framework执行这个简单的查询 db.Database.SqlQuery(“SELECT * FROM hospital”); 但是我收到了这个错误: 数据阅读器有多个字段。 多个字段对EDM原语或枚举类型无效。 可能是什么问题呢?