标签: entity-framework-4

实体框架4 Single()vs First()vs FirstOrDefault()

我有一个时间的魔鬼找到一个比较查询单个项目的不同方法,以及何时使用每个项目.

有没有人有一个比较所有这些的链接,或快速解释为什么你会使用一个而不是另一个?还有更多我不了解的运营商吗?

谢谢.

.net linq linq-to-entities entity-framework entity-framework-4

111
推荐指数
4
解决办法
7万
查看次数

LINQ to Entities区分大小写比较

这不是LINQ to Entities中区分大小写的比较:

Thingies.First(t => t.Name == "ThingamaBob");
Run Code Online (Sandbox Code Playgroud)

如何与LINQ to Entities实现区分大小写的比较?

.net c# linq-to-entities entity-framework-4

110
推荐指数
4
解决办法
6万
查看次数

保存EF4 POCO对象的更改时更新关系

实体框架4,POCO对象和ASP.Net MVC2.我有很多关系,比如BlogPost和Tag实体之间的关系.这意味着在我的T4生成的POCO BlogPost类中,我有:

public virtual ICollection<Tag> Tags {
    // getter and setter with the magic FixupCollection
}
private ICollection<Tag> _tags;
Run Code Online (Sandbox Code Playgroud)

我要求一个BlogPost和来自ObjectContext实例的相关标签,并将其发送到另一层(MVC应用程序中的View).稍后我回到更新的BlogPost,更改了属性并更改了关系.例如,它具有标签"A""B"和"C",并且新标签是"C"和"D".在我的特定示例中,没有新的标签,并且标签的属性永远不会改变,因此唯一应该保存的是改变的关系.现在我需要将它保存在另一个ObjectContext中.(更新:现在我尝试在同一个上下文实例中执行,但也失败了.)

问题:我无法正确保存关系.我尝试了我发现的一切:

  • Controller.UpdateModel和Controller.TryUpdateModel不起作用.
  • 从上下文中获取旧的BlogPost然后修改集合不起作用.(从下一点开始采用不同的方法)
  • 可能会起作用,但我希望这只是一种解决方法,而不是解决方案:(.
  • 尝试在每种可能的组合中为BlogPost和/或Tags执行Attach/Add/ChangeObjectState函数.失败.
  • 看起来像我需要的,但它不起作用(我试图解决它,但不能解决我的问题).
  • 尝试ChangeState/Add/Attach/...上下文的关系对象.失败.

"不起作用"意味着在大多数情况下我使用给定的"解决方案",直到它不产生错误并至少保存BlogPost的属性.关系会发生什么变化:通常使用新的PK将标签添加到Tag表中,并且保存的BlogPost引用那些而不是原始的.当然返回的标签有PK,在保存/更新方法之前,我检查PK并且它们等于数据库中的PK,所以EF可能认为它们是新对象而那些PK是临时的.

我知道的一个问题,并且可能使得无法找到自动化的简单解决方案:当POCO对象的集合发生更改时,应该通过上面提到的虚拟集合属性发生,因为那时FixupCollection技巧将更新另一端的反向引用多对多关系.但是,当View"返回"更新的BlogPost对象时,这种情况并未发生.这意味着对我的问题可能没有简单的解决方案,但这会让我非常伤心,我会讨厌EF4-POCO-MVC的胜利:(.这也意味着EF无法在MVC环境中做到这一点,无论哪个使用EF4对象类型:(.我认为基于快照的更改跟踪应该发现更改的BlogPost与具有现有PK的标签有关系.

顺便说一句:我认为同一个问题发生在一对多的关系上(谷歌和我的同事这么说).我会在家里尝试一下,但即使这样做对我的应用程序中的六个多对多关系没有帮助:(.

asp.net-mvc poco entity-framework-4

107
推荐指数
4
解决办法
3万
查看次数

如何使Readity实体框架数据上下文

我需要向第三方插件公开实体框架数据上下文.目的是允许这些插件仅获取数据,而不是让它们发出插入,更新或删除或任何其他数据库修改命令.因此,我如何只读取数据上下文或实体.

.net datacontext entity-framework readonly entity-framework-4

103
推荐指数
3
解决办法
4万
查看次数

检测到实体框架自引用循环

我有一个奇怪的错误.我正在试验.NET 4.5 Web API,实体框架和MS SQL Server.我已经创建了数据库并设置了正确的主键和外键以及关系.

我创建了一个.edmx模型并导入了两个表:Employee和Department.一个部门可以有很多员工,这种关系存在.我使用scaffolding选项创建了一个名为EmployeeController的新控制器,以使用Entity Framework创建一个带有读/写操作的API控制器.在向导中,选择Employee作为模型,并选择数据上下文的正确实体.

创建的方法如下所示:

public IEnumerable<Employee> GetEmployees()
{
    var employees = db.Employees.Include(e => e.Department);
    return employees.AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)

当我通过/ api/Employee调用我的API时,出现此错误:

'ObjectContent`1'类型无法序列化内容类型'application/json的响应主体; ... ... System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"发生错误.","ExceptionMessage":"使用类型'System.Data.Entity.DynamicProxies检测到自引用循环.Employee_5D80AD978BC68A1D8BD675852F94E8B550F4CB150ADB8649E8998B7F95422552' .Path'[0] .Department.Employees'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":"...

为什么它自引用[0] .Department.Employees?这并没有多大意义.如果我在我的数据库中进行循环引用,我希望这会发生,但这是一个非常简单的例子.怎么可能出错?

c# serialization entity-framework-4 asp.net-web-api

100
推荐指数
10
解决办法
9万
查看次数

ReferentialConstraint中的依赖属性映射到存储生成的列

写入数据库时​​出现此错误:

ReferentialConstraint中的依赖属性映射到存储生成的列.栏目:'PaymentId'.

public bool PayForItem(int terminalId, double paymentAmount, 
      eNums.MasterCategoryEnum  mastercategoryEnum, int CategoryId, int CategoryItemId)
    {

        using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
        {
            int pinnumber = 0;
            long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
            var payment = new DatabaseAccess.Schema.Payment();
            payment.CategoryId = CategoryId;
            payment.ItemCategoryId = CategoryItemId;
            payment.PaymentAmount = (decimal)paymentAmount;
            payment.TerminalId = terminalId;
            payment.PinId = pinid;

            payment.HSBCResponseCode = "";
            payment.DateActivated = DateTime.Now;
            payment.PaymentString = "Payment";
            payment.PromotionalOfferId = 1;
            payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;

            //payment.PaymentId = 1;

            dbEntities.AddToPayments(payment);
            dbEntities.SaveChanges();
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

架构是:

在此输入图像描述

c# sql-server-2008 linq-to-sql entity-framework-4

94
推荐指数
4
解决办法
7万
查看次数

为什么我收到此错误:没有为以下EntitySet/AssociationSet指定映射 - Entity1?

我正在使用Entity Framework 4和Model First方法.

我启动了项目,设计了实体并生成了数据库.一切都很好.

然后我需要回去为我的模型添加另一个实体.但是,当我将实体拖到EDMX时,我收到此错误:

在此输入图像描述

好的!我只需要将Entity1映射到一个表..但是嘿!我正在使用Model First方法,我希望它在生成DDL时为我创建表.

我该如何解决此错误?

.net entity-framework entity-framework-4

91
推荐指数
7
解决办法
12万
查看次数

如何快速在EDMX模型中找到特定的表格?

我想知道是否有人知道在EDMX模型中找到表格的更快捷的方法,而不仅仅是滚动图表并寻找事物.我们的数据库中有大约50个表格,当我正在寻找一个特定的表格时,看看VS放置这个东西只是一件苦差事.

我正在使用VS 2010来解决这个问题.

先感谢您.

c# vb.net edmx entity-framework-4 edmx-designer

91
推荐指数
5
解决办法
2万
查看次数

使用包含在实体框架4中的lambda表达式

我见过很多关于如何克服这个问题的文章,都与CTP4有关,或者添加了我自己的扩展方法.

是否有一个"官方"EF4包含方式在内部使用lambda表达式(对于第一级关系以及第二级和更多级别)或者它最终是否包含在RTM中?

它有一个 - 我很乐意学习如何做到这一点,因为现在在我的代码中使用lambda表达式(使用#system.data.entity#system.data.linq)仍然给了我:

无法将lambda表达式转换为类型'string',因为它不是委托类型:

var customers = from c in
context.Customers.Include(c=>c.Phone)
Run Code Online (Sandbox Code Playgroud)

c# lambda entity-framework-4

85
推荐指数
3
解决办法
7万
查看次数

减少存储库以聚合根

我目前拥有数据库中几乎每个表的存储库,并希望通过将它们简化为仅聚合根来进一步使自己与DDD保持一致.

我们假设我有以下表格,User并且Phone.每个用户可能有一部或多部电话.如果没有聚合根的概念,我可能会这样做:

//assuming I have the userId in session for example and I want to update a phone number
List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId);
phones[0].Number = “911”;
PhoneRepository.Update(phones[0]);
Run Code Online (Sandbox Code Playgroud)

聚合根的概念在纸上比在实践中更容易理解.我永远不会有不属于用户的电话号码,所以取消PhoneRepository并将电话相关的方法合并到UserRepository中是否有意义?假设答案是肯定的,我将重写先前的代码示例.

我是否允许在UserRepository上有一个返回电话号码的方法?或者它应该始终返回对用户的引用,然后通过用户遍历关系以获取电话号码:

List<Phone> phones = UserRepository.GetPhoneNumbers(userId);
// Or
User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone
Run Code Online (Sandbox Code Playgroud)

无论我采用哪种方式获取手机,假设我修改了其中一种,我该如何更新它们?我有限的理解是,根目录下的对象应该通过root更新,这将引导我选择下面的#1.尽管这对于Entity Framework非常有效,但这似乎非常缺乏描述性,因为读取代码时我不知道我实际更新了什么,即使实体框架在图形中保留了更改对象的选项卡.

UserRepository.Update(user);
// Or
UserRepository.UpdatePhone(phone);
Run Code Online (Sandbox Code Playgroud)

最后,假设我有几个查阅表中并没有真正依赖于任何东西,如CountryCodes,ColorsCodes,SomethingElseCodes.我可能会用它们来填充下拉或其他任何原因.这些独立的存储库吗?它们可以组合成某种逻辑分组/存储库,例如CodesRepository?或者是针对最佳做法的.

c# asp.net domain-driven-design entity-framework entity-framework-4

82
推荐指数
3
解决办法
9639
查看次数