我的应用程序的架构结构如下:
用户界面(客户端)
用户界面(XAML)
VM(客户端)
所有视图模型的图层。该层与服务层的DTO一起使用。
服务(服务器端)
客户端的通信接口。客户端使用此服务层的DTO。 该层执行从DTO到EF-Entities(和返回)的转换。我使用automapper进行转换。
域(服务器端)
整个businesslogic分散在几个领域。该层与实体框架中的实体一起使用。
数据访问(服务器端):
数据访问层与EF一起使用。该层设计有存储库/ unitofwork模式。
我的问题:创建新记录效果很好。但是,如果我想更新记录,EF不知道更新。它总是想创建一个新的记录。我假设,问题是,EF与整个变更跟踪机制的参考一起工作。 automapper将始终创建新记录。这是对的吗?
还有其他选择吗?
提前致谢。
亲切的问候,亲
修改: 我的问题摘要:
EF在我的n层架构中没有更新,它总是想创建一个新的记录。
我希望这会有所帮助。
答案 0 :(得分:1)
您需要根据实体的特征在业务层中做出决策。如果您的实体有ID,那么它必须已经存在,因此您应该使用
context.YourEntities.Attach(entity);
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
但如果没有,那么它是新的,你可以使用
context.YourEntities.AddObject(entity);
然后在两条路径之后,
context.SaveChanges();
答案 1 :(得分:0)
您需要附加实体:
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
详细了解此答案:Entity Framework 4 - AddObject vs Attach
这是MSDN参考:http://msdn.microsoft.com/en-us/library/bb896271.aspx
有关上下文生命周期的详细信息,请查看以下答案:Questions about Entity Framework Context Lifetime
答案 2 :(得分:0)
您需要附加实体,然后将实体状态更改为修改