标签: entity-framework-5

实体框架中多个记录的插入顺序

当我尝试同时添加一个包含多个子节点的实体时,我在使用EF重新排序插件时遇到问题.我有一个3级结构,每个(Outer 1--* Item 1--* SubItem)之间有一对多的关系.如果我尝试插入带有Items和Subitems的新Outer,则包含SubItems的Items最终会被插入.

示例代码(.NET 4.5,EF 5.0.0-rc):

public class Outer
{
    public int OuterId { get; set; }
    public virtual IList<Item> Items { get; set; }
}

public class Item
{
    public int OuterId { get; set; }
    [ForeignKey("OuterId")]
    public virtual Outer Outer { get; set; }

    public int ItemId { get; set; }
    public int Number { get; set; }

    public virtual IList<SubItem> SubItems { get; set; }
}

public class SubItem
{
    public int SubItemId …
Run Code Online (Sandbox Code Playgroud)

entity-framework entity-framework-5

11
推荐指数
2
解决办法
6540
查看次数

更改EF5 Code First中的列默认值

我正在尝试使用CF为现有数据库构建模型.我有一个专栏,我忘了设置一个合理的默认值.而不是通过改变它来破坏初始迁移的纯度,我只是想我创建另一个迁移(这是迁移的目的,对吧?:)

public override void Up()
{
    AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.087m));
}

public override void Down()
{
    AlterColumn("Config", "DefaultTaxPerDollar", c => c.Decimal(nullable: false, precision: 19, scale: 5, defaultValue: 0.0m));

}

Run Code Online (Sandbox Code Playgroud)

但是这会Column already has a DEFAULT bound to it.从SQL Server 产生错误.

如何使用CF迁移更改默认值?或者,如何简单地删除默认值(然后使用不同的值重新创建它)?

编辑:

这是生成的SQL:

ALTER TABLE [Config] ADD CONSTRAINT DF_DefaultTaxPerDollar DEFAULT 0.087 FOR [DefaultTaxPerDollar]
ALTER TABLE [Config] ALTER COLUMN [DefaultTaxPerDollar] [decimal](19, 5) NOT NULL
Run Code Online (Sandbox Code Playgroud)

我想我可能已经找到了一个解决方案,将这个Sql()方法与这个帖子启发的一些复杂的SQL 一起使用.问题源于这样一个事实:SQL Server使用约束来实现默认值(OH!我多么想念MySQL!),并为约束生成了名称.因此,Code First团队无法轻易地更改或删除/重新创建默认值.

c# ef-migrations entity-framework-5

11
推荐指数
2
解决办法
5678
查看次数

Microsoft建议实体框架中的二级缓存是什么?

我使用过Jarek Kowalski制作的" EF Provider Wrappers ".它工作正常,但我注意到"限制和免责声明"部分,其中说:

除了示例代码中包含的内容之外,提供程序尚未经过广泛测试,因此您应自行承担使用它们的风险.

与任何其他样品,微软不提供任何形式的支持它,但如果你发现错误或有功能建议,请使用此博客的联系表格,让我了解他们.

我在这里有点困惑,微软是否真的希望开发人员在生产网站上使用EnityFramework而没有任何官方支持(或建议)进行二级缓存?

caching entity-framework data-access-layer entity-framework-5

11
推荐指数
2
解决办法
6356
查看次数

是否有一种扩展Code-First迁移的好方法

我正在开始一个使用Entity Framework的新项目.我已经研究了如何创建数据库的选项,并发现Code-First Migrations最有意义(如果您需要知道原因,请参阅底部).Code-First Migrations让我可以下载到任意SQL,这意味着我仍然可以完全控制.在实践中,我发现问题是,对于某些常见任务而言,降低到SQL似乎非常重复.

出于我的目的,我并不关心迁移中的扩展是否与提供程序无关(我在内的SQL不是).但是,我并没有在迁移框架中找到一个好的接缝或扩展点来添加这些东西.

举一个具体的例子,假设我想为MS-SQL复制指定一个RowGuid列.每次出现都采取的形式

Sql(
    string.Format(
        "Alter Table {0} Alter Column {1} Add ROWGUIDCOL",
        table,
        column ));
Run Code Online (Sandbox Code Playgroud)

所以我编写静态方法来摆脱一些冗余

Sql( MigrationHelper.SetRowGuid( table, column );
Run Code Online (Sandbox Code Playgroud)

-要么-

MigrationHelper.SetRowGuid(Sql, table, column); //passing the Sql method
Run Code Online (Sandbox Code Playgroud)

可能可以在DbMigration上制作这些扩展方法中的任何一种,并通过它来访问它们this. 但仍然看起来不合适:

CreateTable(
    "dbo.CustomerDirectory",
     c => new
         {
             Uid = c.Int(nullable: false),
             CustomerUid = c.Int(nullable: false),
             Description = c.String(nullable: false, maxLength: 50, unicode: false),
             RowGuid = c.Guid(nullable: false),
         })
     .PrimaryKey(t => t.Uid)
     .ForeignKey("dbo.Customer", t => t.CustomerUid);

this.SetRowGuid( Sql, "dbo.CustomerDirectory", "RowGuid" );
//Custom method here because of …
Run Code Online (Sandbox Code Playgroud)

c# sql entity-framework ef-migrations entity-framework-5

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

实体框架5:在上下文中替换条目的正确方法

我想做的很简单.我在db中有一个部件列表,我想根据更新列表删除/插入/更新它们.

主要问题是,当我想要替换一个条目时,我无法将它附加到上下文,因为旧的(待更新的)条目已经附加(通过先前的读取调用)并且抛出异常.

我带着3个想法来到这里.

  1. 手动分离旧条目并附加新条目(尽管将实体状态更改为分离仍会引发异常)
  2. 使用新条目手动更改旧条目的值
  3. 使读取调用无法跟踪(AsNoTracking()),这似乎工作正常,但我担心对延迟加载的影响.

是否有任何功能,如"context.entry.replace(oldEntry,newEntry)"或任何其他正确的方法来做到这一点?

IEnumerable<SoldPart> old = db.SoldParts.Where(sp=>sp.sessionId == sessionId);

                var toDelete = old.Where(po=> !parts.Any(pu=>pu.id == po.id));
                var toCreate = parts.Where(po => !old.Any(pu => pu.id == po.id));
                var toUpdate = parts.Where(po => old.Any(pu => pu.id == po.id));


                foreach (SoldPart item in toDelete)
                {
                    db.SoldParts.Attach(item);
                    db.SoldParts.Remove(item);
                }
                foreach (SoldPart item in toCreate)
                {
                    db.SoldParts.Add(item);
                }

                foreach (SoldPart item in toUpdate)
                {

                    db.SoldParts.Attach(item);
                    db.Entry(item).State = EntityState.Modified;
                }


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

.net entity-framework entity-framework-5

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

更新数据库架构而不丢弃数据?

我首先使用数据库首先使用EF并从数据库生成我的图表.

现在我已切换并对我的图表进行了许多更改,并希望更新我的数据库架构而不会丢失数据.但是,从图中生成数据库似乎丢弃所有表并重新创建它们.

我首先找到了代码的"数据迁移".首先是模型有什么类似的,或者我能保持数据的任何方式吗?

我正在使用VS 2012和EF5

entity-framework entity-framework-5

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

如何获取具有未知名称的DbEntityEntry EntityKey对象

我不应该使用DbEntityEntry的复杂属性方法或属性方法来获取EntityKey对象.我找不到MSDN的任何示例,但我认为这在Entity Framework 5中是可能的.我不知道实体密钥或实体的名称,因为我使用的是通用存储库接口.

c# entity-framework-5

11
推荐指数
1
解决办法
2万
查看次数

无法使用LINQ OrderBy中的属性名进行排序

错误是

LINQ to Entities无法识别方法'System.Object GetValue(System.Object,System.Object [])'方法,并且此方法无法转换为商店表达式.

我的代码是

public static GridResult GetAllUsers(int count, int tblsize,string sortcreteria)
{
      using (UserEntities entity = new UserEntities())
      {

          var data = entity.User_Details.Take(count)
.OrderBy(i =>.GetType().GetProperty(sortcreteria).GetValue(i,null))
.Skip(tblsize).ToList();
          result.DataSource = data;
          result.Count = entity.User_Details.Count();
      }
      return result;
}
Run Code Online (Sandbox Code Playgroud)

如何使用属性名称作为字符串排序?

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

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

当孩子有身份证时,如何使用EF将多个子实体添加到对象?

我们使用EF5和SQL Server 2012以下两个类:

public class Question
{
    public Question()
    {
        this.Answers = new List<Answer>();
    }
    public int QuestionId { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }

}
public class Answer
{
    public int AnswerId { get; set; }
    public string Text { get; set; }
    public int QuestionId { get; set; }
    public virtual Question Question { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

映射如下:

public class AnswerMap : EntityTypeConfiguration<Answer>
{
    public …
Run Code Online (Sandbox Code Playgroud)

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

11
推荐指数
2
解决办法
1万
查看次数

将数据插入多个表MVC ASP的最佳方法

我有4张桌子.OperationTable,ClientTable,ClientDetails,OperationRes

ClientTable

  • 客户端ID
  • 名称
  • 生日
  • VerNumber

ClientDetails

  • 客户端ID
  • 电子邮件
  • ADRESS
  • 电话

OperationTable

  • OperationID
  • 日期
  • 时间
  • 客户端ID

OperationRes

  • 渣油
  • OperationID
  • 名称
  • 类型
  • 没有

我有页面要求客户填写表格以注册smth.一切都必须在一个页面中,在客户提交表单后,我们必须将所有数据插入到表中.OperationTable的日期和时间,ClientTable的名称和姓氏等.我是ASP.NET MVC的新手.我曾尝试使用"Code Fisrt".我创建了Model并且只是用它来自动生成View和Controller.但这不是我想要的.我找到了这个教程.有用!但我有超过4个表,比上面写的更多行.什么是最好的解决方案?

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

11
推荐指数
1
解决办法
3万
查看次数