Tag: entity framework 5

entity framework延迟加载的私有支持字段

我正在使用启用了延迟加载的Entity Framework 5。 我有以下代码: private ICollection _subscriptions = new Collection(); public virtual ICollection Subscriptions { get { return _subscriptions; } set { _subscriptions = value; } } 但这有意义吗? 我想确保公共属性Subscriptions永远不为null。 由于虚拟entity framework会覆盖getter和setter以提供延迟加载function。 我是否需要此字段,或者我可以只使用自动属性,如果没有订阅,我会得到一个空列表?

在ASP.NET MVC 3 Web App + Ninject + EF中为不同用户设置不同的连接字符串

我试图弄清楚如何在每个Web请求上设置不同的连接字符串。 这是我的情景: 一个基于asp.net mvc 3 + ninject +entity framework的webapp 一个单一的实体模型 三个具有相同模型的exception不同的数据库 我到目前为止尝试做的是通过覆盖基本控制器的OnActionExecuting方法来设置默认控制器工厂(传递正确的连接字符串)(每个控制器都从自定义基础inheritance)但是如果我尝试访问两个应该在不起作用的同时访问不同数据库的不同用户。 似乎第一个用户设置了他的连接字符串,第二个用户选择了已设置的连接字符串,而没有设置新的默认控制器。 这是一些代码…… // Base controller public class BaseController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { var database = String.Empty; switch (Request.Url.Host) { case “aaa.domain.local”: database = “AAA”; break; case “bbb.domain.local”: database = “BBB”; break; case “ccc.domain.local”: database = “CCC”; break; } […]

为什么更新外键后引用约束不一致?

抱歉这个模糊的标题,很难用一行来描述: 我有2个实体User和UserAddress ,其中User有2个外键DefaultInvoiceAddressId和DefaultDeliveryAddressId ,UserAddress有UserId外键。 用户对象具有默认地址( DefaultInvoiceAddress和DefaultDeliveryAddress )的导航属性以及其所有地址的一个: AllAddresses 。 映射等工作,创建和更新用户和地址也有效。 但是不起作用的是将用户的现有地址设置为例如DefaultInvoiceAddress。 在SQL术语中,我想要发生的是UPDATE USER SET DefaultInvoiceAddressId = 5 WHERE Id = 3 。 我试过以下方式: private void MarkAs(User user, UserAddress address, User.AddressType type) { if (context.Entry(user).State == EntityState.Detached) context.Users.Attach(user); // guess I don’t really need this: if (context.Entry(address).State == EntityState.Detached) context.UserAddresses.Attach(address); if (type.HasFlag(User.AddressType.DefaultInvoice)) { user.DefaultInvoiceAddressId = address.Id; […]

EF与Nhibernate合并断开的对象图

我刚刚在几个星期前开始了一个新项目,并决定尝试使用EF Code First,之前我使用过NHIbernate,我喜欢从MS中获得ORM的想法,到目前为止它一直很棒 – 直到我开始制作复杂的物体。 我的项目层如下:Azure WCF角色 – 使用EF Code First处理DAL。 带有Knockout的MVC 4的Azure WebSite角色 – 处理客户端。 (我为未来创建了WCFRole,我们需要从不同平台访问服务) 这是非常基本的EF Code First设计,我遇到了以下问题: – 我只在服务和站点之间传输DTO,并制作了一个通用映射器来映射内部DTO(如果存在)。 – 我有一个City表和一个带有City Property的地址对象(我们需要City作为特殊function的属性,而不仅仅是名称) 客户端知道城市列表,并且正在返回现有城市的新地址当我尝试添加新地址时,会创建一个新城市,其中包含现有旧城市的数据,我已经知道这是因为EF没有我不知道如何合并断开连接的对象和我阅读的内容不支持任何合并,并且简单的不太舒服的解决方案只是管理对象状态 – 将City对象状态更改为Unchanged。 但是使用大型复杂数据库设计处理这个问题听起来很可怕 我的问题 – 处理这个问题的最佳做法/简单方法是什么? 我想过一些解决方案 – 覆盖SaveChanges方法遍历所有对象,如果ID不是null / 0 /其他一些约定将其从Added更改为Unchanged – 这个解决方案可以完成吗? 我的第二个问题 – 因为我对NHibernate(连接对象)有很多经验 – 我想知道NHibernate对此有何看法? 我在某处读到NHibernate确实具有重新连接断开的复杂对象的AutoMagic Mergefunction,这是真的吗? 我的基本断开连接的地址 – >城市设计是否会与AutoMagic Merge一起开箱即用? 使用它的后果是什么? 非常感谢 :) 更新:该问题的简化代码。 […]

entity framework代码优先 – 如何在保存时忽略列

我有一个名为Client的类,它首先使用Entity Framework代码映射到数据库表。 该表有一个我需要在Client类中提供的计算字段,但我知道不可能写入该字段。 是否有一种方法可以在保存时配置entity framework以忽略该属性,但在读取时包含该属性? 我已尝试在配置类中使用Ignore方法,或使用[NotMapped]属性,但这些会阻止从数据库中读取属性。

虽然密钥是使用HasKey定义的,但“EntityType没有键定义”exception

使用EF 5(首先是逆向工程代码),我的模型工作正常,直到它突然停止。 \ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType’Projects.Date’没有定义键。 定义此EntityType的键。 \ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType’ProjectstRisk’没有定义键。 定义此EntityType的键。 我使用流畅的API而不是属性来定义键,这里是我的ProjectsDates类。 public partial class ProjectsDate { public string OSProjectCode { get; set; } public Nullable TargetStart { get; set; } public Nullable EndDateOriginal { get; set; } public Nullable EndDateChangeControl { get; set; } public Nullable EndDateActual { get; set; } public Nullable […]

在存储库模式中按ID过滤是不好的做法

我正在使用ASP.NET MVC4和Entity Framework 5 。 基本上每个控制器操作结果都按登录的用户公司ID过滤db结果 。 我刚刚开始实现一个存储库模式来返回模型,而不是直接从控制器中过滤DbContext。 (将companyID传递到存储库以过滤方法的结果) 我有一种有趣的感觉,这样做是不好的做法,但一直无法找到有关该主题的任何信息。 我将在下面插入我当前代码的基本版本,我将不胜感激任何关于它是否是不良做法的信息,以及为什么如此。 IBookingSystemRepository.cs public interface IBookingSystemRepository : IDisposable { IEnumerable GetAppointments(); IEnumerable GetAppointments(bool includeDeleted); IEnumerable GetClients(); IEnumerable GetClients(bool includeDeleted); void Save(); } BookingSystemRepository.cs public class BookingSystemRepository : IBookingSystemRepository { private BookingSystemEntities db; int CompanyID; public BookingSystemRepository(BookingSystemEntities context, int companyID) { this.db = context; this.CompanyID = companyID; […]

entity frameworkSkip方法运行速度很慢

我在我的数据访问层使用Entity Framework 5,ObjectContext和POCO。 我有一个通用的存储库实现,我有一个方法,使用Skip()和Take()通过分页查询数据库。 一切正常,但跳过很多行时查询性能非常慢(我说的是170k行) 这是我对Linq to Entities的查询的摘录: C#代码: ObjectContext oc = TheOBJEntitiesFactory.CreateOBJEntitiesContext(connection); var idPred = oc.CreateObjectSet(“view_Trans”).AsQueryable(); idPred = idPred.OrderBy(sortColumn, sortDirection.ToLower().Equals(“desc”)); var result = idPred.Skip(iDisplayStart).Take(iDisplayLength); return new PagedResult(result, totalRecords); 在对Transact-SQL的翻译查询中,我注意到,不是直接使用视图的ROW_NUMBER()子句进行子查询,而是将ROW_NUMBER()应用于子查询的结果… 例: select top(10) extent1.A, extent1.B.extent1.C from ( select extent1.A, extent1.B, extent1.C, row_number() OVER (ORDER BY [Extent1].[A] DESC) AS [row_number] from ( select A,B,C from table […]

小数超出范围

我正在尝试将十进制140.2705893427存储到SQL Server 2012表中。 该列的数据类型为decimal(12, 10)但我收到错误: {“Parameter value ‘140.2705893427’ is out of range.”} 为什么是这样?

entity framework6错误无法加载指定的元数据资源

我在我的解决方案中使用Entity Framework 6和“模型优先”,我将我的“数据模型”类分成另一个项目,这样我就可以添加对“数据模型”类的引用,而不会暴露我的“数据模型上下文”和连接。 我不想将我的实体数据模型项目(尤其是数据库上下文等)暴露给我的UI层。 我有这个: 我现在已经成功地将我的自动生成的实体类与我的数据模型分开,我尝试通过在项目Mapeo.BusinessEntity中更新实体或属性来实现它。 这是我在DatabaseLayer(Mapeo.DatabaseModel)中的连接字符串 在我的服务层中,我将此连接字符串复制到App.config,我的问题是当我想要添加数据时,我有此消息: 无法加载指定的元数据资源如何解决此问题? 更新后我找到了解决方案,我更改了App.Config中的连接字符串我在连接strign“*”中替换了我的情况下的DataModel目录(Mapeo.DatabaseModel)中的pretentation层现在这是我在图层演示中的连接字符串: