标签: graphdiff

使用graphdiff进行条件映射

我有以下实体DbContext:

在此输入图像描述

public class A
{
   public A()
   {
       Bs = new List<B>(); 
   }

   public ICollection<B> Bs { set; get; }
}   
Run Code Online (Sandbox Code Playgroud)

有时我想更新a图表:

var a = dbContext.As
       .AsNoTracking()
       .Include(x=>x.Bs)
       .firstOrDefault();

var c = new C();
a.Bs.Add(c);

var d = new D();
var e1 = new E();
var e2 = new E();
d.Es.Add(e1); //<-- added new E
d.Es.Add(e2); //<-- added new E

a.Bs.Add(d);
Run Code Online (Sandbox Code Playgroud)

我想更新aBs(更新C,D,E使用过多)graphdiff:

dbContext.UpdateGraph(a,map=>map.OwnedCollection(x=>x.Bs));
Run Code Online (Sandbox Code Playgroud)

这更新 …

c# entity-framework ef-code-first graphdiff

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

由于一个或多个外键属性不可为空,因此无法更改关系

在使用EF更新期间出现以下错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.

有没有一般的方法来查找哪些外键属性导致上述错误?

[更新]

对于以下代码导致上述错误的一种情况(我在断开连接的环境中工作,所以我曾经graphdiff更新过我的对象图),当它想要运行时_uow.Commit();:

public void CopyTechnicalInfos(int sourceOrderItemId, List<int> targetOrderItemIds)
{
  _uow = new MyDbContext();
   var sourceOrderItem = _uow.OrderItems
          .Include(x => x.NominalBoms)
          .Include("NominalRoutings.NominalSizeTests")
          .AsNoTracking()
          .FirstOrDefault(x => x.Id == sourceOrderItemId);


   var criteria = PredicateBuilder.False<OrderItem>();
   foreach (var targetOrderItemId in orderItemIds)
   {
      int id = targetOrderItemId;
      criteria = criteria.OR(x => x.Id == id);
   }
   var targetOrderItems = _uow.OrderItems
                              .AsNoTracking()
                              .AsExpandable()   
                              .Where(criteria)
                              .ToList();

  foreach (var targetOrderItem in targetOrderItems)
  {
        //delete old datas and insert new datas 
        targetOrderItem.NominalBoms …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first graphdiff

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

如何使用GraphDiff更新相关实体?

我有以下型号:

public class Customer
{
    public int Id {get; set;}
    public string Name {get; set;}
    public int AddressId {get; set;}
    public virtual Address Address {get; set;}
    public virtual ICollection<CustomerCategory> Categories {get; set;}
}

public class CustomerCategory
{
    public int Id {get; set;}
    public int CustomerId {get; set;}
    public int CategoryId {get; set;}
    public virtual Category Category {get; set;}
}

public class Address
{
    public int Id {get; set;}
    public string Street{get; set;}
    public virtual PostCode PostCode {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

从上面,并使用GraphDiff,我想更新客户聚合如下: …

c# entity-framework ef-code-first graphdiff

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

将表达式转换为另一个表达式

我有以下表达方式

Expression<Func<T, object>> expr1;

有没有办法把它投入

Expression<Func<IUpdateConfiguration<T>, object>>

[更新]

或者Expression<Func<IUpdateConfiguration<T>, object>>从现有的新建Expression<Func<T, object>>

c# generics expression casting graphdiff

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

如何使用graphdiff忽略属性?

我正在使用带有graphdiff和EDMX的EF6,并且必须忽略特定实体的属性.

我该怎么办,因为即使获取属性插入或更新总是留下NULL字段?

ignore properties edmx graphdiff

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

使用AutoFac解析具有扩展方法的类

我正在使用第三方库GraphDiff,它将扩展方法添加到DBContext类.我的Context类继承自Interface,如下所示

 MyContext: DbContext,IMyContext 
Run Code Online (Sandbox Code Playgroud)

IoC包含注册MyContext作为IMyContext.接口没有扩展方法的签名和第三个.现在我没有得到MyContext将如何使用该扩展方法?如果我创建了MyContext的Object,那么它就有了这个方法,但是当它获得Inject时却没有

entity-framework autofac graphdiff

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