我有一个表中的date列有默认值或绑定为getutcdate()。 我想在entity framework中使用这个。在生成EDM时,我能够在列级别find“默认值”属性,但是我认为这是硬编码值。 请让我知道如何使用数据库中指定的默认值。
我用来实现我的存储库类,你可以看到下面 public Class MyRepository { private MyDbContext _context; public MyRepository(MyDbContext context) { _context = context; } public Entity GetEntity(Guid id) { return _context.Entities.Find(id); } } 不过,我最近读了这篇文章,说这是一个不好的做法,有数据上下文作为您的存储库中的私有成员: http : //devproconnections.com/development/solving-net-scalability-problem 现在,理论上这篇文章是正确的:因为DbContext实现了IDisposable,所以最正确的实现是以下内容。 public Class MyRepository { public Entity GetEntity(Guid id) { using (MyDbContext context = new MyDBContext()) { return context.Entities.Find(id); } } } 然而,根据这个其他文章configurationDbContext将不是必需的: http ://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext.html 哪两条是正确的? […]
我目前正在使用一个类似于这样的DbContext : namespace Models { public class ContextDB: DbContext { public DbSet<User> Users { get; set; } public DbSet<UserRole> UserRoles { get; set; } public ContextDB() { } } } 然后,我在所有需要访问数据库的控制器的顶部使用以下行。 我也使用它在我的UserRepository类,其中包含所有与用户有关的方法(如获得活跃的用户,检查他有什么angular色等): ContextDB _db = new ContextDB(); 考虑这一点..有一个访客可以有多个DbContexts活跃的情况。 如果他访问使用UserRepository的控制器..这可能不是最好的想法,我有几个关于它的问题 我应该什么时候做一个新的DbContext /我应该有一个我传递的全局上下文吗? 我可以拥有一个全球范围内的环境吗? 这是否会导致性能下降? 其他人怎么做呢?
所以,我的EF模型有关系,根据我在例子中看到的,这些关系应该用ICollection的虚拟属性来完成。 例: public class Task { public int Id { get; set; } public string Description { get; set; } public virtual ICollection<SubTask> { get; set; } } 我读的地方,我应该使用IEnumerable来防止延迟执行,是正确的? 这意味着如果我的DAL方法返回IEnumerable,仍然是IQueryable,那么SQL将在那个时候执行,而不是在我调用网页中的.TOList的那一刻。 那么,最佳做法是什么? 我应该返回什么? IEnumerable,List ?, IList,ICollection? 谢谢
使用(entity framework)EF5处理批量更新的最佳方法是什么? 我有两个我感兴趣的特殊情况: 更新一个字段(例如UpdateDate)的列表(列表)之间的100到100.000 Id的主键。 分别调用每个更新似乎要花费很多开销,并且需要很长时间。 在同一个对象(例如用户)中插入很多,也在100到100.000之间。 有什么好build议?
假设我在SQL Server 2008中有以下表定义: CREATE TABLE Person (PersonId INT IDENTITY NOT NULL PRIMARY KEY, Name VARCHAR(50) NOT NULL, ManyMoreIrrelevantColumns VARCHAR(MAX) NOT NULL) CREATE TABLE Model (ModelId INT IDENTITY NOT NULL PRIMARY KEY, ModelName VARCHAR(50) NOT NULL, Description VARCHAR(200) NULL) CREATE TABLE ModelScore (ModelId INT NOT NULL REFERENCES Model (ModelId), Score INT NOT NULL, Definition VARCHAR(100) NULL, […]
我面临着新的ASP MVC 4function,它附带了新的成员资格数据库模式和新的初始化。 在mvc 3和旧版本中,开发人员能够使用web.config中的规范创build自定义用户configuration文件字段,但现在我面临默认mvc 4项目中的filter名称空间中的方法: WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 和用户configuration文件表: [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public string UserName { get; set; } } 但是,方法InitializeDatabaseConnection只生成UserName和UserId我需要生成其他额外的字段。 我在EF codeFirst方法有很好的经验,在这种情况下,我尝试编辑UserProfile类: [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } [Column] [Required] public […]
我有一个具有char属性的对象: public class Product { public char Code { get; set; } } entity framework似乎无法映射字符(当我从模型对象中创build数据库模式时,该字段在数据库中缺失)。 有反正我可以映射字符(例如一个string)使用stream利的API? 我不想更改模型对象,因为它们是传统共享库的一部分。
我一直在使用entity framework4.3在一个现有的数据库,我有几个场景,我试图迎合。 首先,如果我删除我的数据库,我想EF重新创build,如果从头开始 – 我已经成功地使用CreateDatabaseIfNotExists数据库初始化程序。 其次,如果我更新我的模型和数据库已经存在,我想数据库自动更新 – 我已经成功地使用entity framework4.3迁移为此。 所以这是我的问题。 假设我在我的模型中添加了一个新的表格,这个表格需要一些参考数据,确保在数据库初始化器运行时以及迁移运行时创build这个数据的最好方法是什么。 我的愿望是,当我从头开始创build数据库时,以及数据库由于运行迁移而被更新时,数据被创build。 在一些EF迁移的例子中,我看到人们在迁移的UP方法中使用SQL()函数来创build种子数据,但是如果可能的话,我宁愿使用上下文来创build种子数据(就像你在大多数数据库初始化例子中看到的那样)因为在我看来,当EF的整个想法正在抽象出来的时候,你会使用纯SQL。 我试图在UP方法中使用上下文,但由于某种原因,当我尝试在调用下方直接添加种子数据以创build表时,它并不认为在迁移中创build的表存在。 任何智慧不胜感激。
在数据库优先的场景中使用DbContext时,我发现添加和删除实体与ObjectContext相比非常慢。 如果添加2000个实体并在最后保存更改,DbContext比ObjectContext慢3到5倍(顺便说一下:我知道使用SqlBulkCopy添加大量实体会更好,但这不是重点)。 如果在每次添加之后保存更改,则DbContext仍然接近两倍。 当涉及到删除它甚至会变得更糟:当在所有实体删除的末尾保存时,DbContext比ObjectContext慢大约18倍。 我把我用来比较数据库访问技术和小型控制台应用程序的高度开发的testing应用程序进行仔细检查。 两者都显示使用DbContext添加和删除实体的错误结果。 以下是控制台应用程序的结果: Inserting 2000 entities via DbContext saving changes at the end: 2164ms Inserting 2000 entities via ObjectContext saving changes at the end: 457ms Inserting 2000 entities via DbContext saving changes after each object addition: 8420ms Inserting 2000 entities via ObjectContext saving changes after each object adding: 4857ms Inserting 2000 […]