有人能指出POCO,自我跟踪实体,POCO代理之间的区别吗?
实际上,我正在使用Entity Framework 4.0和POCO(Repository Pattern),每当我在POCO中做一些更改并调用ObjectContext.Savechanges时,它就会反映到DB.我的问题是,
我正在使用的示例代码,
IEFRepository<Category> catRepository = new EFRepository<Category>();
Category c = catRepository.FindOne<Category>(x => x.Name == "Paper");
c.Name = "Paper";
catRepository.SaveChanges(System.Data.Objects.SaveOptions.None);
Run Code Online (Sandbox Code Playgroud) 脚本
问题
在服务器端,我们使用Entity Framework模型生成了实体对象.我们使用自我跟踪T4模板来生成实体.这些实体是共享的,可以从客户端使用(Silverlight 4项目).
但是当我们尝试添加新的Web服务引用时,代理生成器不起作用.reference.cs文件为空.我们在Web Reference的配置中检查了"Reuse Types"选项.我们检查了将要共享的程序集(仅限实体程序集).
我们试图从实体的DataContract属性中删除每个(IsReference = true),但它不起作用.
任何想法或解决方法?
自我跟踪实体.真棒.
除非你做了类似的事情
return Db.Users;
Run Code Online (Sandbox Code Playgroud)
没有任何自我跟踪实体在跟踪(直到可能,它们被反序列化).
精细.因此,我们必须认识到返回给我们的实体可能没有启用跟踪.
怎么办???
我尝试过的事情
对于给定的方法体:
using (var db = new Database())
{
if (update.ChangeTracker.ChangeTrackingEnabled)
db.Configurations.ApplyChanges(update);
else
FigureItOut(update, db);
db.SaveChanges();
update.AcceptChanges();
}
Run Code Online (Sandbox Code Playgroud)
以下FigureItOut所有实现都失败了:
db.Configurations.Attach(update);
db.DetectChanges();
Run Code Online (Sandbox Code Playgroud)
也不
db.Configurations.Attach(update);
db.Configurations.ApplyCurrentValues(update);
Run Code Online (Sandbox Code Playgroud)
也不
db.Configurations.Attach(update);
db.Configurations.ApplyOriginalValues(update);
Run Code Online (Sandbox Code Playgroud)
也不
db.Configurations.Attach(update);
db.Configurations.ApplyChanges(update
Run Code Online (Sandbox Code Playgroud)
除了以外我也无法想象其他任何东西
究竟,我应该对不跟踪自己的自我跟踪实体做些什么?
小更新:
盲目地将实体标记为修改过的作品,然而这看起来有点臭.在这种情况下,这是我们能做的最好的吗?
entity-framework .net-4.0 entity-framework-4 self-tracking-entities
如果我想使用实体框架4作为我的数据层,并希望将我的实体发送到另一层,无论是通过WCF还是其他机制,然后希望能够更新实体并将它们发回以进行更新/删除/插入最好使用自我跟踪实体还是poco对象?
如果可能的话,我宁愿使用POCO对象,因为如果可能的话我不想依赖其他层中的实体框架,但我不知道将POCO重新连接到上下文有多困难.
我有一个关于EF和WCF的架构问题.我们正在使用Entity Framework(带有Oracle数据库)和基于WPF的GUI开发三层应用程序.GUI通过WCF与服务器通信.
我们的数据模型非常复杂(超过一百个表),有很多关系.我们目前正在使用默认的EF代码生成模板,我们在跟踪实体状态方面遇到了很多麻烦.
客户端上的用户界面也相当复杂,有时将具有超过50个对象的对象图向下发送到单个用户界面,在实体之间具有多个聚合层.能够在BLL层中轻松决定在客户端上修改了哪些对象以及新创建了哪些对象是一个重要的目标.
在两层之间管理实体和实体状态最明智的方法是什么?自我跟踪实体?这种情况下最常见的陷阱是什么?
那些在真实生产环境中使用STE的人能说出他们的经历吗?
我想将一个实体框架自我跟踪实体完整对象图(一对多关系中的父/子)序列化为Json.
为了序列化我使用ServiceStack.JsonSerializer.
这就是我的数据库的样子(为简单起见,我删除了所有不相关的字段):

我以这种方式获取完整的个人资料图:
public Profile GetUserProfile(Guid userID)
{
using (var db = new AcmeEntities())
{
return db.Profiles.Include("ProfileImages").Single(p => p.UserId == userId);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是尝试序列化它:
Profile profile = GetUserProfile(userId);
ServiceStack.JsonSerializer.SerializeToString(profile);
Run Code Online (Sandbox Code Playgroud)
生产一个StackOverflowException.我相信这是因为EF提供了一个无限模型,可以将串行器拧紧.也就是说,我可以称之为:profile.ProfileImages[0].Profile.ProfileImages[0].Profile ...等等.
如何"展平"我的EF对象图或以其他方式阻止ServiceStack.JsonSerializer进入堆栈溢出情况?
jsonserializer entity-framework-4 self-tracking-entities c#-4.0 servicestack
我想知道在WCF服务中是否建议使用Self Tacking Entities(在Entity Framework中)?如果是,那么你可以指导我一个指导如何做到这一点的教程吗?
实际上,我将使用Prism与MEF和MVVM开发WPF应用程序.我决定使用Entity Framework.我想要有关这种方法的建议和建议.
任何帮助将不胜感激.
在我的解决方案中,我有一个ASP.NET MVC3项目,以及一个与数据库一起工作的WCF项目.我使用entity framework self tracking和AutoMapper映射对象.
我的问题是:我如何使用AutoMapper邮政行动像箱子和删除和编辑方法
我看到这个问题,但没有帮助我这给我一个错误argument type '...' is not assignable to parameter type '...'
[HttpPost]
public ActionResult Create(MUser muser)
{
if (ModelState.IsValid)
{
Mapper.CreateMap<User, MUser>();
var user = Mapper.Map<User, MUser>(muser);
_proxy.SaveUser(user);
return RedirectToAction("Index");
}
return View(muser);
}
Run Code Online (Sandbox Code Playgroud)

一个类是否可以从Entity Framework类继承并仍然使用继承的类映射保留回DB?当我尝试和SaveChanges声明Type没有任何映射时,我收到了试图从"自我跟踪实体"类派生的错误.我希望,因为Type是从Entity类继承的,它也可以以某种方式继承实体映射以使其工作.有没有人能够让这个工作?
我试图支持的场景是在另一个引用包含实体和映射的程序集的程序集中扩展Entity对象.部分类和映射将编译到包含Entity对象的程序集中.所以我不能通过使用部分类来实现这一点.
mapping inheritance entity-framework-4 self-tracking-entities
这就是我们如何在WCF中为我们的EF实体实现通用的Save()服务.TT为我们工作.即使我们没有任何问题,我也不愿意认为这是最好的方法(即使它可能是).你们看起来很聪明,乐于助人,所以我想我会提出这样的问题:
有没有更好的办法?
[OperationContract]
public User SaveUser(User entity)
{
bool _IsDeleted = false;
using (DatabaseEntities _Context = new DatabaseEntities())
{
switch (entity.ChangeTracker.State)
{
case ObjectState.Deleted:
//delete
_IsDeleted = true;
_Context.Users.Attach(entity);
_Context.DeleteObject(entity);
break;
default:
//everything else
_Context.Users.ApplyChanges(entity);
break;
}
// now, to the database
try
{
// try to save changes, which may cause a conflict.
_Context.SaveChanges(System.Data.Objects.SaveOptions.None);
}
catch (System.Data.OptimisticConcurrencyException)
{
// resolve the concurrency conflict by refreshing
_Context.Refresh(System.Data.Objects.RefreshMode.ClientWins, entity);
// Save changes.
_Context.SaveChanges();
}
}
// return
if (_IsDeleted)
return null; …Run Code Online (Sandbox Code Playgroud) wcf ×4
poco ×2
.net-4.0 ×1
architecture ×1
automapper ×1
c# ×1
c#-4.0 ×1
inheritance ×1
mapping ×1
savechanges ×1
servicestack ×1