我有以下实体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)
我想更新a其Bs(更新C,D,E使用过多)graphdiff:
dbContext.UpdateGraph(a,map=>map.OwnedCollection(x=>x.Bs));
Run Code Online (Sandbox Code Playgroud)
这更新 …
在使用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) 我有以下型号:
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,我想更新客户聚合如下: …
我有以下表达方式
Expression<Func<T, object>> expr1;
有没有办法把它投入
Expression<Func<IUpdateConfiguration<T>, object>>?
[更新]
或者Expression<Func<IUpdateConfiguration<T>, object>>从现有的新建Expression<Func<T, object>>?
我正在使用带有graphdiff和EDMX的EF6,并且必须忽略特定实体的属性.
我该怎么办,因为即使获取属性插入或更新总是留下NULL字段?
我正在使用第三方库GraphDiff,它将扩展方法添加到DBContext类.我的Context类继承自Interface,如下所示
MyContext: DbContext,IMyContext
Run Code Online (Sandbox Code Playgroud)
IoC包含注册MyContext作为IMyContext.接口没有扩展方法的签名和第三个.现在我没有得到MyContext将如何使用该扩展方法?如果我创建了MyContext的Object,那么它就有了这个方法,但是当它获得Inject时却没有
graphdiff ×6
c# ×4
autofac ×1
casting ×1
edmx ×1
expression ×1
generics ×1
ignore ×1
properties ×1