Tag: ef code first

复合键作为外键

我在MVC 3应用程序中使用entity framework4.1。 我有一个实体,我有主键由两列(复合键)组成。 这被另一个实体用作外键。 如何build立关系? 在正常的scnerios我们使用: public class Category { public string CategoryId { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { public int ProductId { get; set; } public string Name { get; set; } public string CategoryId […]

EF代码 – 第一对一关系:多重性在关系中的angular色*中是无效的

我试图做到以下几点: public class class1() { public int Id {get;set;} [ForeignKey("Class2")] public int Class2Id {get;set;} public virtual Class2 Class2 {get;set;} } public class class2() { public int Id {get;set;} [Required] public virtual int Class1Id {get;set;} [Required] [ForeignKey("Class1Id")] public Class1 Class1 {get;set;} } 但是,每次我尝试迁移我的数据库时,我得到以下错误: Class1_Class2_Target :: Multiplicity在关系“Class2_Class1”中的angular色“Class2_Class1_Target”中无效。 由于“依赖angular色”属性不是关键属性,所以“依赖angular色”的多重性的上界必须是“*”。 这里可能是什么问题?

entity framework中多列的唯一键约束

我使用的是Entity Framework 5.0 Code First; public class Entity { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public string EntityId { get; set;} public int FirstColumn { get; set;} public int SecondColumn { get; set;} } 我想将FirstColumn和SecondColumn之间的组合作为唯一。 例: Id FirstColumn SecondColumn 1 1 1 = OK 2 2 1 = OK 3 3 3 = OK 5 3 1 = THIS […]

EF包括其他实体(通用存储库模式)

我在entity framework代码优先使用通用存储库模式。 一切工作正常,直到我需要在查询中包含更多的实体。 我成功地包含了一个实体,但现在我不知道如何包含多个实体。 看看我到目前为止: public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class { var entityName = GetEntityName<TEntity>(); return _objectContext.CreateQuery<TEntity>(entityName); } public IList<TEntity> GetQueryWithInclude<TEntity>(string toInclude) where TEntity : class { var entityName = GetEntityName<TEntity>(); return _objectContext.CreateQuery<TEntity>(entityName).Include(toInclude).ToList(); } private string GetEntityName<TEntity>() where TEntity : class { return string.Format("{0}.{1}", _objectContext.DefaultContainerName, _pluralizer.Pluralize(typeof(TEntity).Name)); } 我试图做的,但没有工作是传递一个string数组到一个函数,然后尝试“追加”查询顶部的包括。 我想知道如果我调用GetQueryWithInclude,并一次传递一个实体名称(实际上是一个导航属性)来聚合查询的结果,但我担心这可能会重复每个调用的查询结果…你认为最好的方法是什么? 提前致谢! 更新: 这是我想要实现的一个例子: public […]

EntityType“IdentityUserLogin”没有定义密钥。 定义这个EntityType的关键

我正在使用Entity Framework Code First和MVC 5.当我使用个人用户帐户身份validation创build了我的应用程序时,我获得了一个帐户控制器,并且还提供了使个人用户帐户身份validation正常工作所需的所有必需类和代码。 已经有的代码是这样的: public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DXContext", throwIfV1Schema: false) { } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } } 但是,我继续使用代码先创build自己的上下文,现在我也有以下几点: public class DXContext : DbContext { public DXContext() : base("DXContext") { } public DbSet<ApplicationUser> Users { get; set; } public DbSet<IdentityRole> Roles { get; […]

ASP.NET MVC中每个请求一个DbContext(没有IOC容器)

道歉,如果这已经被回答,但如何保证一个entity frameworkDbContext每个请求,如果你不使用国际奥委会容器? (到目前为止,我所遇到的答案涉及国际奥委会容器解决scheme。) 看起来像大多数解决scheme挂钩到HttpContext.Current.Items字典,但如何保证在请求完成时处理DbContext? (或者是用EF DbContext来处理不是绝对必要的?) 编辑 我目前在我的控制器实例化和处置我的DbContext,但我也有我的DbContext在ActionFilters和我的MembershipProvider(我刚刚注意到,也是一对夫妇validation器)的几个单独的实例化。 所以,我认为集中实例化和存储我的DbContext以减less开销可能是一个好主意。

entity framework(EF)代码第一级联删除的一对零或一的关系

继Julie Lerman的Pluralsight“Entity Framework 5入门”课程的“代码优先build模”部分之后,我创build了两个具有一对一或一对一关系的POCO类:一个父代(User)和一个可选孩子(UserDetail)。 用户和UserDetail数据模型图(点击查看)。 请注意,图中的UserId属性是UserDetail的主键和外键 。 相关代码: public class User { //… [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } /* Has a 1:0..1 relationship with UserDetail */ public virtual UserDetail UserDetail { get; set; } //… } public class UserDetail { //… /* Has a 0..1:1 relationship with User */ public virtual […]

我如何使用entity framework自动过滤软删除的实体?

我首先使用实体​​框架代码。 我重写DbContext SaveChanges以允许我执行“软删除”: if (item.State == EntityState.Deleted && typeof(ISoftDelete).IsAssignableFrom(type)) { item.State = EntityState.Modified; item.Entity.GetType().GetMethod("Delete") .Invoke(item.Entity, null); continue; } 这很好,所以对象知道如何标记自己是一个软删除(在这种情况下,它只是将IsDeleted设置为true )。 我的问题是我怎么能这样做,当我检索对象忽略IsDeleted任何? 所以,如果我说_db.Users.FirstOrDefault(UserId == id)如果该用户有IsDeleted == true它将忽略它。 本质上我想过滤? 注意:我不想只把&& IsDeleted == true这就是为什么我用接口标记类,所以删除知道如何“只是工作”,我想以某种方式修改检索知道如何“只是工作“也基于那个接口存在。

EF codefirst:我应该初始化导航属性吗?

我曾经看过一些书(例如编程entity framework代码第一个Julia Lerman )定义了他们的领域类(POCO),没有像以下导航属性的初始化: public class User { public int Id { get; set; } public string UserName { get; set; } public virtual ICollection<Address> Address { get; set; } public virtual License License { get; set; } } 一些其他书籍或工具(例如Entity Framework Power Tools )在生成POCO时会初始化该类的导航属性,如: public class User { public User() { this.Addresses = new IList<Address>(); […]

虚拟关键字在Entity Framework 4.1 POCO代码中有什么作用?

在EF Code First中的属性上使用virtual关键字是否有效? 有人可以在不同的情况下描述它的所有后果吗? 例如,我知道它可以控制延迟加载 – 如果在ICollection / one-to-many关系属性上使用virtual关键字,则默认情况下它将被延迟加载,而如果将virtual关键字取消,它将会急于加载。 在EF中使用POCO实体, virtual关键字还有什么其他效果? 我应该默认使用virtual的所有属性,或默认不使用它?