标签: entity-framework-5

实体框架一对多关系,但对象引用未设置为对象的实例

我是初学者,我有 3 个实体:会员、帖子、评论。一个会员有很多帖子,一个帖子有很多评论。

   public class Member
   {
            [Key]
            public int Id{get;set;}    
            public string Name{get;set;}   
            public virtual ICollection<Post> Posts { get; set; }    
   }
   public class Post
   {            
       [Key]
       public int PostId{get;set;}        
       public string Subject{get;set;}        
       public int AccountId{get;set;}             
       public virtual Member member{get;set;}        
       public ICollection<Comment> Comments { get; set; }
   }

   public class Comment
   {
      [Key]
       public int CommentId{get;set;}    
       public string Body{get;set;}
       public int PostId { get; set; }
       public virtual Post post { get; set; }
   }
Run Code Online (Sandbox Code Playgroud)

这是在我的上下文中定义的关系:

           modelBuilder.Entity<Post>()
                .HasRequired(c=>c.member)
                .WithMany(t=>t.Posts) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3 entity-framework-5

1
推荐指数
1
解决办法
2982
查看次数

是否可以从Linq2Entities查询返回结构?

此代码生成运行时错误:

struct MyStruct {
  public int ID;
  public string Desc;
}
...
var q = db.MyTable.Select(t => new MyStruct { ID = t.ID, Desc = t.Desc });
Run Code Online (Sandbox Code Playgroud)

发生错误是因为结构没有无参数构造函数.但我不能使用显式构造函数,因为没有SQL转换.

我的第一个问题是为什么这不会产生编译时错误 - 编译器知道这MyStruct是一个结构,并且我不能在这个不存在的无参数构造函数上使用对象初始化器.

但更重要的问题是,这是Linq2Entities的一个已知限制,你必须使用类而不是结构?

c# linq linq-to-entities entity-framework-5

1
推荐指数
1
解决办法
706
查看次数

使用Func <>而不是lambda时超时已到期

鉴于:

public EntityAddress ReadSingle(Func<EntityAddress, bool> predicate)
{
    //var result = Context.CV3Address.FirstOrDefault(a => a.GUID == 1100222);
    var result = Context.CV3Address.FirstOrDefault(predicate);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

FirstOrDefault(a => a.GUID == 1100222); 立即返回结果.

FirstOrDefault(predicate);导致超时异常.请注意谓词= lambda表达式

我怀疑是后一种方法试图拉下所有记录,这些记录不会发生在这么大的一张桌子上.

为什么会这样?

c# entity-framework entity-framework-5

1
推荐指数
1
解决办法
262
查看次数

无法在 Entity Framework 5 中检索 OriginalValues

我写一个asp.net应用mvc4和我使用实体框架5.我的每一个实体都像场EnteredByEnteredOnLastModifiedByLastModifiedOn

我正在尝试使用该SavingChanges事件自动保存它们。下面的代码是从众多博客、SO 答案等中汇总的。

public partial class myEntities : DbContext
{
    public myEntities()
    {            
        var ctx = ((IObjectContextAdapter)this).ObjectContext;
        ctx.SavingChanges += new EventHandler(context_SavingChanges);
    }

    private  void context_SavingChanges(object sender, EventArgs e)
    {

        ChangeTracker.DetectChanges();

        foreach (ObjectStateEntry entry in
                 ((ObjectContext)sender).ObjectStateManager
                   .GetObjectStateEntries
                    (EntityState.Added | EntityState.Modified))
        {         
            if (!entry.IsRelationship)
            {
                CurrentValueRecord entryValues = entry.CurrentValues;               

                if (entryValues.GetOrdinal("LastModifiedBy") > 0)
                {
                    HttpContext currContext = HttpContext.Current;
                    string userName = "";
                    DateTime now = DateTime.Now;

                    if (currContext.User.Identity.IsAuthenticated)
                    {
                        if (currContext.Session["userId"] != …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-4 entity-framework-5

1
推荐指数
1
解决办法
2536
查看次数

获取 IQueryable&lt;T&gt;,其中 T 的任何字段包含给定字符串

我使用的 EF5 有一个由字符串、日期、可为空日期和整数组成的 20 个大型属性实体。是否可以使用 Linq 对每个字段执行包含操作。

我不想为每个字段构建 linq 语句

results = list.Where(house => house.Date1.ToString().Contains(search)||
                              house.Address1.Contains(search)||
                              house.Address2.Contains(search)||
                              house.Address3.Contains(search)||
                              .........................)
Run Code Online (Sandbox Code Playgroud)

我想我想将所有属性转换为字符串(如有必要),然后对每个属性进行包含?理想情况下,这将发生在数据库级别。

我想我无法连接它们,因为如果两个字段的结束和开始创建了搜索文本,可能会导致错误匹配?有任何想法吗?

更新

我目前是这个LINQ string[] 针对多个字段的第二个答案,使用 LinqKit AsExpandable 和 EF 将函数转换为基于类型的字符串。但是我似乎找不到将 DateTime 转换为字符串的 SqlFunction

c# linq entity-framework entity-framework-5

1
推荐指数
1
解决办法
2463
查看次数

使用实体框架动态选择要向其中插入数据的表

因此,我正在编写一个应用程序,该应用程序需要在运行时选择一个实体并通过实体框架进行添加,然后将其保存到数据库中,我已经通过使用ADO.NET实体数据模型创建了数据库和基于该模型的模型,使用反射类,根据运行时添加的数据选择保存数据的对象,如下所示;

                mytype = Type.GetType(objName);
                myObject = Activator.CreateInstance(mytype);
Run Code Online (Sandbox Code Playgroud)

我如何做这样的事情来选择要使用的实体,我可以做这样的事情吗:

                db.[MyEntity].Add(myObject);
                db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

谢谢

c# entity-framework asp.net-mvc-4 entity-framework-5

1
推荐指数
1
解决办法
1988
查看次数

是否可以添加对象列表来更改实体框架的状态

是否可以更改 EF6 中的实体列表状态

List<AuditTrail> auditLogs = new List<AuditTrail>();
auditLogs = GetLog(context, CreatedBy);
context.AuditTrails.AddRange(auditLogs);
context.Entry(context.AuditTrails).State = System.Data.Entity.EntityState.Unchanged;
Run Code Online (Sandbox Code Playgroud)

它抛出以下异常。

The entity type DbSet`1 is not part of the model for the current context.
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现上述逻辑?

c# asp.net-mvc entity-framework entity-framework-5

1
推荐指数
1
解决办法
3261
查看次数

在SaveChanges之后获取所有对象的标识

我正在使用如下的Entity框架同时插入对象.

context = new MyContext();
foreach (var x in lstX)
{ 
    var abc = new abc{ name= x.abcName };
    context.abcs.Add(abc);

    var xyz = new xyz{ name = x.xyzName };
    context.xyzs.Add(xyz);
}

context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

是否有可能获得所有这些插入对象的标识?

c# entity-framework-5

1
推荐指数
1
解决办法
948
查看次数

如何根据列查找所有重复的记录

我正在尝试在 LINQ/Entity Framework 中构造一个查询,该查询将返回基于一列具有重复项的所有行。但是,我不想对它们进行分组,我实际上想获取所有具有重复项的行。

name age
---- ---
john 15
john 16
jack 20
jill 26
sam  10
sam  12
Run Code Online (Sandbox Code Playgroud)

如何根据名称列获取具有重复项的行列表?这是我期待的结果集:

name age
---- ---
john 15
john 16
sam  10
sam  12
Run Code Online (Sandbox Code Playgroud)

我尝试了这样的事情,但我认为这会给我一个分组结果,我认为:

var duplicates = Shop.GroupBy(r => r.Name)
                     .Where(x => x.Count() > 1)
                     .Select(val => val.Key);
Run Code Online (Sandbox Code Playgroud)

linq entity-framework entity-framework-4 entity-framework-5

1
推荐指数
1
解决办法
1975
查看次数

是否可以附加修改初始迁移的索引?

我在我的项目中使用实体框架代码第一种方法.我在包管理器控制台中使用enable-migrations语句创建了模型并启用了迁移.我的上下文类包含映射配置和关系

modelBuilder.Configurations.Add(new PostMap());
modelBuilder.Configurations.Add(new UserMap());
Run Code Online (Sandbox Code Playgroud)

我的迁移文件中的Up方法201302261054023_InitialCreate.cs包含所有表定义,作为通过DbSet <Type>属性指定的上下文.

我在自定义数据库初始化程序中更改了InitializeDatabase方法,因为我想在数据库初始化期间迁移到特定的迁移.

public void InitializeDatabase(T context)
{
    bool databaseExists = context.Database.Exists();
    if (!databaseExists)
        context.Database.CreateIfNotExists();

    var configuration = new Configuration();
    var migrator = new DbMigrator(configuration);
    migrator.Update("InitialCreate");
}
Run Code Online (Sandbox Code Playgroud)

可以修改201302261054023_InitialCreate类中的Up方法来添加另一个索引

CreateTable(
        "dbo.City",
        c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Name = c.String(maxLength: 450),
            })
        .PrimaryKey(t => t.Id);
Run Code Online (Sandbox Code Playgroud)

CreateTable(
        "dbo.City",
         c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Name = c.String(maxLength: 450),
            })
        .PrimaryKey(t => t.Id)
        .Index(t=>t.Name,true);
Run Code Online (Sandbox Code Playgroud)

没有附加另一个迁移?

entity-framework ef-code-first ef-migrations entity-framework-5

0
推荐指数
1
解决办法
823
查看次数