日期:2014-05-17  浏览次数:20490 次

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;
}
Entity?Framework Repository C#

------解决方案--------------------
我没用过这个所谓的“框架”,不过大概可以猜测出原因

EF上下文往往维持了状态,如果不是相同ef实例,你是不能随便add滴。他会报什么“对象已存在context不可add”或者“context已存在key不可重复添加”一类的错误
------解决方案--------------------


拷贝部分的原意不是为了add
而是为了return

你不应该把传入的参数本身return回来 这个说你明白吗?(class是引用类似 你把return给使用者上是很可能造成误导的——比如使用者没看这个方法的代码 他以为这个是新对象 然后去操作 然后就把o给改变了 其他的地方就出bug了)
这样说你理解了吗?