Entity Framework插入操作,Repository模式
ProDinner开源项目UniRepo.cs中的一个方法:
public T Insert<T>(T o) where T : Entity, new()
{
var t = new T();
t.InjectFrom(o);
c.Set<T>().Add(t);
return t;
}
为什么不直接
public T Insert<T>(T o) where T : Entity, new()
{
c.Set<T>().Add(o);
return o;
}
------解决方案--------------------我没用过这个所谓的“框架”,不过大概可以猜测出原因
EF上下文往往维持了状态,如果不是相同ef实例,你是不能随便add滴。他会报什么“对象已存在context不可add”或者“context已存在key不可重复添加”一类的错误
------解决方案--------------------
拷贝部分的原意不是为了add
而是为了return
你不应该把传入的参数本身return回来 这个说你明白吗?(class是引用类似 你把return给使用者上是很可能造成误导的——比如使用者没看这个方法的代码 他以为这个是新对象 然后去操作 然后就把o给改变了 其他的地方就出bug了)
这样说你理解了吗?