我想传递一个值给DbContext的ctor,然后让这个值在相关的DbSets上强制执行“过滤”。 这是可能的…还是有更好的方法? 代码可能如下所示: class Contact { int ContactId { get; set; } int CompanyId { get; set; } string Name { get; set; } } class ContactContext : DbContext { public ContactContext(int companyId) {…} public DbSet<Contact> Contacts { get; set; } } using (var cc = new ContactContext(123)) { // Would only return contacts where […]
我想弄清楚如何使用EF代码First 4.1 RC的复合键。 目前,我正在使用[Key]数据注释,但我无法指定多个键。 如何指定一个复合键? 这是我的例子: public class ActivityType { [Key] public int ActivityID { get; set; } [Required(ErrorMessage = "A ActivityName is required")] [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")] public string ActivityName { get; set; } } 我需要“活动名称”也是一个关键。 当然,我可以对此进行编码,但那不是很好的数据库devise。
这是EF4.1代码优先:如何加载相关数据(父 – 子 – 孙)? 在@Slauma的指导下,我可以检索数据。 我的第一个代码是这样的: var model = DbContext.SitePages .Where(p => p.ParentId == null && p.Level == 1) .OrderBy(p => p.Order) // ordering parent .ToList(); foreach (var child in model) { // loading children DbContext.Entry(child) .Collection(t => t.Children) .Query() .OrderBy(t => t.Order) // ordering children .Load(); foreach (var grand in child.Children) { // […]
我有一个ASP.NET MVC3 Web应用程序与UI,商业(实体)和数据(DbContext)层。 我正在使用entity framework4.1代码优先。 现在,我重写了Data层中的DbContext.SaveChanges() ,这样我就可以为ModifiedDate设置对实现我的IAuditable接口的任何实体对象所做的所有更改。 我有一个静态的DateProvider类和方法(GetCurrentDate),返回DateTime.Now (除非我正在运行一个testing,在这种情况下,它返回任何我告诉它)。 我想自动将ModifiedBy属性设置为当前用户。 什么是最好的方式去做这个? 在框架中是否有内容可以让我访问这些信息,或者是否需要设置类似于DateProvider类的东西? 这是一个Active Directory环境,我们在IIS中使用WindowsAuthentication 。 这是我的SaveChanges代码: public override int SaveChanges() { var changeSet = ChangeTracker.Entries<IAuditable>(); if (changeSet != null) { foreach (var entry in changeSet.Where(c => c.State != EntityState.Unchanged)) { entry.Entity.ModifiedDate = DateProvider.GetCurrentDate(); } } return base.SaveChanges(); }
有没有办法装饰你的POCO类来自动加载子实体,而不必在每次加载时使用Include() ? 说我有一个类车,车轮,门,引擎,保险杠,窗户,排气等复杂types的属性,在我的应用程序,我需要从我的DbContext 20个不同的地方加载我的车不同的查询等。不希望在每次我想装载我的汽车的时候都指定我想包括所有的属性。 我想说 List<Car> cars = db.Car .Where(x => c.Make == "Ford").ToList(); //NOT .Include(x => x.Wheels).Include(x => x.Doors).Include(x => x.Engine).Include(x => x.Bumper).Include(x => x.Windows) foreach(Car car in cars) { //I don't want a null reference here. String myString = car.**Bumper**.Title; } 我可以以某种方式装饰我的POCO类,或者在我的OnModelCreating()或者在EF中设置一个configuration,告诉它在装载我的汽车时只装载我的汽车的所有部件? 我希望这样做,所以我的理解是,使我的导航属性虚拟出来。 我知道NHibernate支持类似的function。 只是想知道我是否错过了一些东西。 提前致谢! 干杯, 弥敦道 我喜欢下面的解决scheme,但是想知道是否可以将调用嵌套到扩展方法。 例如,说我有一个类似的情况与发动机,它有很多部分,我不想包括到处。 我可以做这样的事吗? (我还没有find一种方法,这个工作呢)。 这样,如果以后我发现引擎需要FuelInjectors,我只能将它添加到BuildEngine中,而不必将其添加到BuildCar中。 […]
只是想知道什么是更好的方式来configuration我的模型? 我喜欢Fluent API,因为那时我的POCO没有充满EF特定的属性。 有什么你不能用你可以使用属性的Fluent API?
目前,当我需要运行一个查询,将使用瓦特/分页我这样做是这样的: //Setup query (Typically much more complex) var q = ctx.People.Where(p=>p.Name.StartsWith("A")); //Get total result count prior to sorting int total = q.Count(); //Apply sort to query q = q.OrderBy(p => p.Name); q.Select(p => new PersonResult { Name = p.Name }.Skip(skipRows).Take(pageSize).ToArray(); 这工作,但我想知道是否有可能提高这个效率,而仍然使用linq? 我想不出一种方法来结合使用存储过程一次访问数据库的数据检索数据库。
DbContext上没有Detach(object entity) 。 我是否有能力首先在EF代码上分离对象?
我正在使用EF 4.1 Code First从新的自制数据层迁移出一个新的数据层。 我已经build立了两个程序集,一个用于我的上下文,一个用于所有POCO代码的第一类。 我有一些业务逻辑,例如,针对在一些不同的地方使用的一个表(或几个表)的查询。 我应该把它放在哪里? 它不能进入POCO类,因为它join了一对表,所以需要一个上下文。 它可以放在上下文中,但是上下文会因为数百个混乱的查询而变得臃肿。 所有的业务逻辑是否有共同的模式或安排?
基本上,我在一个事务中插入35000个对象: using(var uow = new MyContext()){ for(int i = 1; i < 35000; i++) { var o = new MyObject()…; uow.MySet.Add(o); } uow.SaveChanges(); } 这需要永远! 如果我使用底层ObjectContex t(通过使用IObjectAdapter ),它仍然很慢,但大约需要20 IObjectAdapter 。 它看起来像DbSet<>正在做一些线性search,这需要平方米的时间… 其他人看到这个问题?