相关疑难解决方法(0)

保存EF4 POCO对象的更改时更新关系

实体框架4,POCO对象和ASP.Net MVC2.我有很多关系,比如BlogPost和Tag实体之间的关系.这意味着在我的T4生成的POCO BlogPost类中,我有:

public virtual ICollection<Tag> Tags {
    // getter and setter with the magic FixupCollection
}
private ICollection<Tag> _tags;
Run Code Online (Sandbox Code Playgroud)

我要求一个BlogPost和来自ObjectContext实例的相关标签,并将其发送到另一层(MVC应用程序中的View).稍后我回到更新的BlogPost,更改了属性并更改了关系.例如,它具有标签"A""B"和"C",并且新标签是"C"和"D".在我的特定示例中,没有新的标签,并且标签的属性永远不会改变,因此唯一应该保存的是改变的关系.现在我需要将它保存在另一个ObjectContext中.(更新:现在我尝试在同一个上下文实例中执行,但也失败了.)

问题:我无法正确保存关系.我尝试了我发现的一切:

  • Controller.UpdateModel和Controller.TryUpdateModel不起作用.
  • 从上下文中获取旧的BlogPost然后修改集合不起作用.(从下一点开始采用不同的方法)
  • 可能会起作用,但我希望这只是一种解决方法,而不是解决方案:(.
  • 尝试在每种可能的组合中为BlogPost和/或Tags执行Attach/Add/ChangeObjectState函数.失败.
  • 看起来像我需要的,但它不起作用(我试图解决它,但不能解决我的问题).
  • 尝试ChangeState/Add/Attach/...上下文的关系对象.失败.

"不起作用"意味着在大多数情况下我使用给定的"解决方案",直到它不产生错误并至少保存BlogPost的属性.关系会发生什么变化:通常使用新的PK将标签添加到Tag表中,并且保存的BlogPost引用那些而不是原始的.当然返回的标签有PK,在保存/更新方法之前,我检查PK并且它们等于数据库中的PK,所以EF可能认为它们是新对象而那些PK是临时的.

我知道的一个问题,并且可能使得无法找到自动化的简单解决方案:当POCO对象的集合发生更改时,应该通过上面提到的虚拟集合属性发生,因为那时FixupCollection技巧将更新另一端的反向引用多对多关系.但是,当View"返回"更新的BlogPost对象时,这种情况并未发生.这意味着对我的问题可能没有简单的解决方案,但这会让我非常伤心,我会讨厌EF4-POCO-MVC的胜利:(.这也意味着EF无法在MVC环境中做到这一点,无论哪个使用EF4对象类型:(.我认为基于快照的更改跟踪应该发现更改的BlogPost与具有现有PK的标签有关系.

顺便说一句:我认为同一个问题发生在一对多的关系上(谷歌和我的同事这么说).我会在家里尝试一下,但即使这样做对我的应用程序中的六个多对多关系没有帮助:(.

asp.net-mvc poco entity-framework-4

107
推荐指数
4
解决办法
3万
查看次数

自我追踪实体的目的是什么?

我一直在阅读.net中的自跟踪实体以及如何从*.edmx文件生成它们.我正在努力理解的是生成这些实体的原因是什么让你了解基本的EF实体?此外,有些人提到了自我跟踪实体和Silverlight,但为什么要使用这些实体而不是客户端或RIA服务生成的共享类?

自我跟踪实体有什么意义,为什么要使用它们?

.net c# entity-framework self-tracking-entities

40
推荐指数
2
解决办法
2万
查看次数

自我跟踪实体与POCO实体

我们正在开始一个新的基于Web的产品,我们计划通过WCF服务公开我们的业务逻辑.我们将使用ASP.NET 4.0,C#,EF 4.0.将来我们希望基于这些服务构建iphone应用程序和WPF应用程序.我一直在阅读很多关于使用POCO和自我跟踪实体(STE)的内容,据我所知,STEs在网络方案中效果不佳.任何人都能更清楚地了解这个问题吗?

asp.net wcf poco entity-framework-4 self-tracking-entities

31
推荐指数
2
解决办法
1万
查看次数

EF4 POCO:快照与WCF上的自我跟踪

去年,我使用Entity Framework(当然是.NET3.5)为我们的项目开发了一个数据访问服务,并使用Julie Lerhman的书作为指导开发了状态跟踪POCO对象.我们使用WCF并且还拥有Silverlight 3客户端.我们正在转向.NET 4.0,我想转而使用代码生成来消除浪费的开发人员编写POCO类和翻译类的时间.

通过我所做的研究,似乎有三种状态跟踪POCO:

1)更改了跟踪代理:对我们似乎没有用,因为它似乎不适用于WCF序列化.

2)基于快照:检索POCO实体图时拍摄快照,将客户端返回的图与该快照进行比较,比较差异......对我来说似乎不错.

3)自跟踪实体:代码生成器生成用于在POCO对象内进行自我跟踪的逻辑.这似乎与我们现在所做的很接近,除非它是为我们生成的.

我试图弄清楚所有这些方法之间的优缺点.我猜测1和2是"连接"的,并且他们需要最初查询POCO以保持实例化的ObjectContext,但是无法确认这一点.我也没有看到为什么有人会真的打扰选项1的原因,因为选项3似乎做同样的事情......

快照似乎对我来说最简单,但如果这需要ObjectContext保持打开很长一段时间我不太确定...

我只是一名初级程序员,所以这里有任何建议,特别是关于Silverlight 3(我相信选项2和3适用于Silverlight 3但2可能有问题)非常感谢.

wcf entity-framework snapshot poco self-tracking-entities

12
推荐指数
1
解决办法
8076
查看次数

如何在Entity Framework 4 .NET中更新实体

我的代码是这样的:

public class Program
{
 [STAThread]
 static void main()
 {
  DataAccessClass dal = new DataAccessClass();
  List<Person> list = dal.GetPersons();
  Person p = list[0];
  p.LastName = "Changed!";
  dal.Update(p);
 }
}

public class DataAccessClass
{
 public static List<Person> GetPersons()
 {
  MyDBEntities context = new MyDBEntities();
  return context.Persons.ToList();
 }

 public void Update(Person p)
 {
  // what sould be written here?
 }
}
Run Code Online (Sandbox Code Playgroud)

现在请告诉我应该在Update()方法中写什么?我写的一切,遇到各种例外.(请注意加载的数据是跟踪,连接或类似的)

ado.net entity-framework

10
推荐指数
1
解决办法
1万
查看次数

我怎么知道我是否应该使用自我跟踪实体或DTO/POCO?

有什么问题我可以问自己我们的设计,以确定我们是否应该在我们的应用程序中使用DTO或自我跟踪实体?

以下是我所知道的一些需要考虑的事项:

  • 我们有一个带有WPF/MVVM客户端,WCF服务器和MS SQL数据库的标准n层应用程序.
  • 用户可以定义自己的接口,因此WCF服务所需的数据会根据用户为自己定义的接口而更改
  • 模型在客户端和服务器端都用于验证.我们不会直接约束DTO或STE
  • 某些模型包含在需要时从WCF服务延迟加载的属性
  • 数据库层阻塞多个服务器/数据库
  • 服务器端有权限检查会影响数据的返回方式.例如,某些数据根据用户的角色部分或完全屏蔽
  • 我们的资源有限(时间,人力等)

那么,我怎样才能确定哪些适合我们?我之前从未使用EF,所以我真的不知道STE是否适合我们.

我见过人们建议从STE开始,只有当它成为一个问题时才实施DTO,但是我们目前有DTO并且正在尝试决定使用STE是否会让生活变得更轻松.我们在这个过程中已经足够早,切换不会花费太长时间,但我不想切换到STE只是为了发现它对我们不起作用并且必须切换回来.

wcf poco n-tier-architecture entity-framework-4 self-tracking-entities

8
推荐指数
1
解决办法
3369
查看次数