Tag: entity framework

如何调用entity framework6中的存储过程(代码优先)?

我对Entity Framework 6很新,我想在我的项目中实现存储过程。 我有一个存储过程如下: ALTER PROCEDURE [dbo].[insert_department] @Name [varchar](100) AS BEGIN INSERT [dbo].[Departments]([Name]) VALUES (@Name) DECLARE @DeptId int SELECT @DeptId = [DeptId] FROM [dbo].[Departments] WHERE @@ROWCOUNT > 0 AND [DeptId] = SCOPE_IDENTITY() SELECT t0.[DeptId] FROM [dbo].[Departments] AS t0 WHERE @@ROWCOUNT > 0 AND t0.[DeptId] = @DeptId END Department级别: public class Department { public int DepartmentId […]

entity framework代码来自同一个表的前两个外键

我刚刚开始使用EF代码,所以我完全是这个主题的初学者。 我想创build球队和比赛之间的关系:1比赛= 2队(主场,客队)和结果。 我认为创build这样的模型很容易,所以我开始编码: public class Team { [Key] public int TeamId { get; set;} public string Name { get; set; } public virtual ICollection<Match> Matches { get; set; } } public class Match { [Key] public int MatchId { get; set; } [ForeignKey("HomeTeam"), Column(Order = 0)] public int HomeTeamId { get; set; } [ForeignKey("GuestTeam"), […]

entity framework:“存储更新,插入或删除语句影响了意外数量的行(0)”。

我正在使用entity framework来填充网格控件。 有时当我进行更新时,出现以下错误: 存储更新,插入或删除语句影响了意外数量的行(0)。 实体被加载后,实体可能已被修改或删除。 刷新ObjectStateManager条目。 我无法弄清楚如何重现这一点。 但是这可能与我做出更新的距离有多大关系。 有没有人看到这个或没有人知道错误信息是指什么? 编辑:不幸的是,我不再可以重现我在这里所遇到的问题,因为我离开了这个项目,不记得我是否最终find了解决scheme,是否有其他开发者修复了这个问题,或者我是否解决了这个问题。 所以我不能接受任何答案。

已经有一个打开的DataReader与这个Command关联,必须先closures它

我有这个查询,我得到这个函数的错误: var accounts = from account in context.Accounts from guranteer in account.Gurantors select new AccountsReport { CreditRegistryId = account.CreditRegistryId, AccountNumber = account.AccountNo, DateOpened = account.DateOpened, }; return accounts.AsEnumerable() .Select((account, index) => new AccountsReport() { RecordNumber = FormattedRowNumber(account, index + 1), CreditRegistryId = account.CreditRegistryId, DateLastUpdated = DateLastUpdated(account.CreditRegistryId, account.AccountNumber), AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber) }) .OrderBy(c=>c.FormattedRecordNumber) .ThenByDescending(c => […]

引入FOREIGN KEY约束可能会导致循环或多个级联path – 为什么?

我一直在摔跤了一段时间,不能完全弄清楚发生了什么。 我有一个包含边的卡实体(通常是2) – 卡和边都有一个阶段。 我正在使用EF Codefirst迁移,并且迁移失败,出现此错误: 在表“边”上引入FOREIGN KEY约束“FK_dbo.Sides_dbo.Cards_CardId”可能会导致循环或多个级联path。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 这是我的卡实体: public class Card { public Card() { Sides = new Collection<Side>(); Stage = Stage.ONE; } [Key] [Required] public virtual int CardId { get; set; } [Required] public virtual Stage Stage { get; set; } [Required] [ForeignKey("CardId")] public virtual […]

使用事务或SaveChanges(false)和AcceptAllChanges()?

我一直在调查交易,看来只要我把false传递给SaveChanges() ,然后在没有错误的情况下调用AcceptAllChanges() ,他们就会在EF中自我照顾。 SaveChanges(false); // … AcceptAllChanges(); 如果有什么坏事怎么办? 我不必回滚,或者一旦我的方法超出范围,交易就结束了吗? 通过交易中途分配的任何专栏会发生什么? 我猜想如果有人在我之前添加了一个logging我的坏了,那么这意味着将有一个失踪的身份价值。 有没有任何理由在我的代码中使用标准的TransactionScope类?

LINQ to Entities不能识别该方法

试图执行linq查询时出现以下错误: LINQ to Entities不识别方法'布尔IsCharityMatching(System.String,System.String)'方法,并且此方法不能被转换为存储expression式。 我读过很多以前的问题,人们得到相同的错误,如果我正确地理解这是因为LINQ to Entities要求整个LINQ查询expression式被转换为服务器查询,因此你不能调用一个外部方法在里面。 我还没有能够把我的情景转化成现在可行的东西,我的大脑开始融化,所以我希望有人能够指引我正确的方向。 我们正在使用entity framework和规范模式(我是新来的)。 以下是使用规范的代码: ISpecification<Charity> specification = new CharitySearchSpecification(charityTitle, charityReference); charities = charitiesRepository.Find(specification).OrderBy(p => p.RegisteredName).ToList(); 这里是linqexpression式: public System.Linq.Expressions.Expression<Func<Charity, bool>> IsSatisfied() { return p => p.IsCharityMatching(this.charityName, this.charityReference); } 这是IsCharityMatching方法: public bool IsCharityMatching(string name, string referenceNumber) { bool exists = true; if (!String.IsNullOrEmpty(name)) { if (!this.registeredName.ToLower().Contains(name.ToLower()) && !this.alias.ToLower().Contains(name.ToLower()) && !this.charityId.ToLower().Contains(name.ToLower())) […]

该关系不能改变,因为一个或多个外键属性是不可空的

我得到这个错误,当我对一个实体的GetById(),然后将子实体的集合设置到我的新列表来自MVC视图。 操作失败:由于一个或多个外键属性不可空,因此关系无法更改。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新的关系,必须为外键属性指定另一个非空值,否则必须删除不相关的对象。 我不太明白这一行: 该关系不能改变,因为一个或多个外键属性是不可空的。 为什么我会改变两个实体之间的关系? 在整个应用程序的整个生命周期中应该保持不变。 发生exception的代码很简单,将集合中的修改过的子类分配给现有的父类。 这将有助于去除儿童class,增加新的和修改。 我会认为entity framework处理这个。 代码行可以被提炼为: var thisParent = _repo.GetById(1); thisParent.ChildItems = modifiedParent.ChildItems(); _repo.Save();

EF:包含where子句

由于标题build议我正在寻找一种方法来做一个where子句结合一个包含。 这是我的情况:我负责支持一个充满代码气味的大型应用程序。 改变太多的代码导致错误到处都是,所以我正在寻找最安全的解决scheme。 比方说,我有一个对象总线和一个对象人(公共汽车有一个导航收集的人)。 在我的查询中,我需要select所有的巴士只有乘客醒着。 这是一个简单的虚拟示例 在当前的代码中: var busses = Context.Busses.Where(b=>b.IsDriving == true); foreach(var bus in busses) { var passengers = Context.People.Where(p=>p.BusId == bus.Id && p.Awake == true); foreach(var person in passengers) { bus.Passengers.Add(person); } } 在此代码之后,处理Context,并在调用方法中将所得到的Bus实体映射到DTO类(实体的100%副本)。 此代码会导致多次调用数据库,这是一个不行,所以我在MSDN博客上find了这个解决scheme debugging结果,但当实体映射到DTO(使用AutoMapper)时,这工作得很好我得到一个exception,上下文/连接已closures,该对象无法加载。 (上下文总是closures不能改变这个:() 所以我需要确保选定的乘客已经加载(IsLoaded导航属性也是假的)。 如果我检查乘客集合计数也抛出exception,但也有Passegers集合称为“包裹的相关实体”,其中包含我的过滤对象的集合。 有没有办法将这些包装的相关实体加载到整个集合中? (我不能更改automapper映射configuration,因为这是在整个应用程序中使用)。 有没有另外一种方法来获得积极的乘客? 任何暗示都欢迎… 编辑 Gert Arnold的答案因为数据没有被加载而不起作用。 但是,当我简化它,并删除它被加载的地方。 这是非常奇怪的,因为execute sql在两种情况下返回所有的乘客。 所以在将结果返回到实体时必定存在问题。 Context.Configuration.LazyLoadingEnabled = […]

代码优先与模型/数据库优先

什么是使用entity framework4.1的代码优先模型/数据库先用EDMX图表的优点和缺点? 我试图完全理解使用EF 4.1构build数据访问层的所有方法。 我正在使用Repository模式和IoC 。 我知道我可以使用代码优先的方法:手工定义我的实体和上下文,并使用ModelBuilder来微调模式。 我也可以创build一个EDMX图,并select使用T4模板生成相同POCO类的代码生成步骤。 在这两种情况下,我最终都是ORM不可知的POCO对象和从DbContext派生的上下文。 数据库首先似乎是最吸引人的,因为我可以在企业pipe理器中devise数据库,快速同步模型并使用devise器对其进行微调。 那么这两种方法有什么区别呢? 这只是关于VS2010与企业pipe理器的偏好吗?