标签: poco

EF CTP5 - 强类型的预先加载 - 如何包含嵌套的导航属性?

试图将我们的EF4解决方案转换为EF CTP5,并遇到了问题.

这是模型的相关部分:

在此输入图像描述

相关关系: - 一个许多城市 - 一个城市只有一个

现在,我想执行以下查询: - 获取系统中的所有县,并包括所有城市,以及这些城市的所有州.

在EF4中,我会这样做:

var query = ctx.Counties.Include("Cities.State");
Run Code Online (Sandbox Code Playgroud)

在EF CTP5中,我们有一个强类型的包含,它需要一个Expression<Func<TModel,TProperty>>.

我可以让县的所有城市都没有问题:

var query = ctx.Counties.Include(x => x.Cities);
Run Code Online (Sandbox Code Playgroud)

但我如何才能获得这些城市的

我使用纯POCO,所以County.CitiesICollection<City>,所以我不能这样做:

var query = ctx.Counties.Include(x => x.Cities.State)
Run Code Online (Sandbox Code Playgroud)

因为ICollection<City>没有一个叫做的属性State.

这几乎就像我需要使用嵌套的IQueryable.

有任何想法吗?我是否需要回退到这个场景中包含的魔术字符串?

entity-framework poco eager-loading entity-framework-ctp5

29
推荐指数
1
解决办法
8474
查看次数

实体框架4:为所有实体创建单个图表是否有意义?

我写了一些关于实体框架的假设,然后是几个问题(所以请纠正我错在哪里).我正在尝试使用EF 4的POCO.

我的假设:

  • EF图表只能存在一个数据上下文.
  • 数据上下文可以引用多个实体.
  • 如果您有两个数据源,比如MS SQL服务器和Oracle,则EF需要两个不同的图来访问数据.
  • EF图数据上下文是"工作单元",对图中的任何内容都有一个Save().(当然你可以将它包装在UnitOfWork类中,但它基本上具有相同的职责).

假设这是正确的,这是我的问题:

  • 如果不将所有实体保留在同一个EF图表上,那么如何保持数据完整性,如果没有"客户","订单"就不能存在? 这仅仅是存储库的一个功能,只是为了验证完整性而加载数据,还是我们"尝试/捕获"数据库参照完整性错误?

  • 你不会为每个实体创建一个EF图吗? 例如,我不希望客户的更改和产品的更改一起写入,因为它们彼此无关(将它们放在同一图表上会导致它们一起写入).或者EF图的范围是否包含存储在同一存储介质中的所有类似实体?

将这样的实体分开是一种规范,还是只有一个图表来保存所有实体?我会想到后者,但我的想法越来越好.

poco ado.net-entity-data-model entity-framework-4

27
推荐指数
2
解决办法
9823
查看次数

ORM /持久层建议

我正在开始一个新项目,我正在寻找一个非常好的ORM或非基于SQL的持久层.
对于这个项目,我真的不关心数据是如何持久化的,只要它可以以合理的速度查询和存储,最重要的是简单的查询.
应该无缝地处理并发(前端将在另一个层上,并且将有几个同时用户,但不一定处理相同的数据)并且我必须更少关注数据层(简单查询,自动懒惰)装载等)更好.
我还想不惜一切代价避免使用基于字符串的查询,因此支持LINQ或其他直观且可能强类型查询的工具会获得很大的好处.
最后使用POCO对象是我真正想要做的另一件事
这里是我评估的产品列表以及它们不适合的原因,只是为了让我看不到任何关于使用它们的建议:

  • NHibernate:疯狂的xml,太多的设置,高维护复杂性和模型更改的成本,会话工厂很乱,不符合我的需求
  • Castle ActiveRecord:基于NHibernate,少量文档以及与NHibernate相关的一些问题仍然适用.此外,为了获得合适的模型,它需要很多属性,一个人最好手动创建模式,并且处理关系的方式是一种耻辱.
  • Linq To SQL:缺少POCO对象,根据MS,它不会提高太多加班时间(EF是他们所承诺的)
  • 实体Framweork:虽然在第4版中POCO对象是可能的,但它们仍然非常hacky并迫使你做太多的手工工作来设置.此外,v4只是一个测试版
  • LLBLGen Pro:很好,尤其是SelfServicing适配器,但不是POCO.此外,LINQ提供商还不完善.最后,删除一组对象是不可能通过LINQ导致混合API(其中一个远非直观)和我不喜欢.
  • XPO:除了直观,非常慢,并发问题,而不是POCO
  • SubSonic SimpleRepository:几分钟我以为我在做梦.当我弄清楚事情是如何处理关系时,deam结束了

我也看过MongoDB和CouchDB,但在这些情况下,相关对象的捕获看起来像是在做正确的事情之前需要进行太多的测试.此外,它们都不提供强类型查询.

提前感谢您的建议!

.net c# orm persistence poco

26
推荐指数
3
解决办法
3576
查看次数

使用Entity Framework 4和Code-First从数据库中排除字段/属性

我想知道有没有办法从数据库中排除一些字段?例如:

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string FatherName { get; set; }

    public bool IsMale { get; set; }
    public bool IsMarried { get; set; }

    public string AddressAs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何从数据库中排除AddressAs字段?

.net c# poco entity-framework-4 ef-code-first

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

如何将简单类序列化/反序列化为XML并返回

有时我想模拟我的类的存储数据而不设置数据库的往返.例如,假设我有以下类:

public class ShoppingCart
{
    public List<CartItem> Items {get; set;}
    public int UserID { get; set; }
}

public class CartItem
{
    public int SkuID { get; set; }
    public int Quantity  { get; set; }
    public double ExtendedCost  { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

假设我ShoppingCart在内存中构建了一个对象,并希望将其"保存"为XML文档.这有可能通过某种XDocument.CreateFromPOCO(shoppingCart)方法吗?在另一个方向怎么样:是否有一种ShoppingCart从XML文档创建对象的内置方法,如new ShoppingCart(xDoc)

.net c# xml poco

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

向客户端发送数据的最佳做法是什么:POCO或DTO?

我正在使用EF 4和POCO开始一个项目.

向客户端发送数据的最佳做法是什么?我应该发送POCO还是应该有DTO?

在将实体(与上下文断开连接)发送到客户端时,我是否应该注意任何问题?

建议的做法是将POCO发送到客户端层吗?

.net c# poco dto entity-framework-4

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

使用EF4的POCO模板时"找不到元数据信息"?

我刚安装了EF4的POCO模板.我的模型中有一个实体,AnnouncementText,并且T4文件似乎正确生成.当我访问自动生成的属性时,尝试访问此新实体会引发以下错误MyObjectContext.AnnouncementTexts:

InvalidOperationException:无法找到EntityType'MyNamespace.AnnouncementText'的映射和元数​​据信息.

AnnouncementTextPOCO 上的属性似乎与数据库中的列匹配,并且我没有更改任何自动生成的代码.

堆栈跟踪是:

   at System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)
   at System.Data.Objects.ObjectContext.GetEntitySetForNameAndType(String entitySetName, Type entityCLRType, String exceptionParameterName)
   at System.Data.Objects.ObjectContext.CreateObjectSet[TEntity](String entitySetName)
   at MyNamespace.MyObjectContext.get_AnnouncementTexts() in C:\<snip>\MyObjectContext.Context.cs:line 65
   at MyNamespace.Class1.Main() in C:\<snip>\Class1.cs:line 14
Run Code Online (Sandbox Code Playgroud)

如果我.tt从解决方案中删除文件并在模型上启用代码生成,我可以毫无问题地访问该属性.

这是我的代码,如果可能有帮助:

using (var context = new MyObjectContext())
   foreach (var at in context.AnnouncementTexts)
      Console.WriteLine(at.Title);
Run Code Online (Sandbox Code Playgroud)

关于可能出错的任何想法?

entity-framework poco efpocoadapter

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

EF4 Poco问题映射类型相同名称相同程序集不同的命名空间

我遇到了EF4Proxy Pocos的问题.

我在同一个程序集中有两个具有相同名称的类但名称空间不同:

QuoteModels.CashPayment
OrderModels.CashPayment
Run Code Online (Sandbox Code Playgroud)

这编译很好但在运行时EF抛出以下异常:

指定的架构无效.错误:\ r \n由于多个CLR类型与EDM类型"CashPayment"匹配,因此CLR类型到EDM类型的映射不明确.以前发现CLR类型'QuoteModels.CashPayment',新发现的CLR类型'OrderModels.CashPayment'

是否有一种解决方法可以在具有不同命名空间的同一程序集中使用具有相同名称的类来与Ef4一起使用?

我是否必须给他们不同的名字或将他们移到另一个集会?

c# namespaces poco entity-framework-4

23
推荐指数
2
解决办法
7798
查看次数

POCO的解释

我想知道是否有人能给出POCO(普通旧CLR对象)的可靠解释(例子).我在维基百科上找到了一个简短的解释,但它确实没有给出可靠的解释.

poco

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

MVC3应用程序/服务层/存储库层/ POCO类/ EF4 - 问题!

我是这个整体设计概念的新手,在过去几周的阅读中,我收集了大量的信息,但它似乎分散且矛盾.条款喜忧参半,我只是很难想到这一点.

我使用的模式是这样的,并假设流程如下:

MVC应用程序
控制器处理来自客户端的给定视图的请求/响应.在控制器操作方法内部,它们联系服务(服务层)并请求对象以构建视图模型,并从视图模型中检索对象.

视图模型
我在视图中使用强类型视图模型.

是视图模型DTO吗?它们应该只包含Name,AddressLine1,Address City等简单属性,还是应该包含复杂属性,多个对象等.

是视图模型中的验证.如果是这样,它将是必需的字段,字段长度等验证.然后验证用户名已经存在,或者您需要与服务层中的其他对象进行交互?

视图模型可以只包含从EF返回的POCO类,还是应该使用AutoMapper?

如果使用AutoMapper和DTO,DTO是POCO类的克隆吗?

您会在控制器,视图模型或下面的服务层中进行映射吗?

服务
对我来说,服务是与存储库联系的对象,用于从EF获取POCO对象.这就是我所有业务逻辑的所在.一旦服务将对象传递回存储库以持久保存到EF,它们就被视为有效对象.它是否正确?

存储库
它们中没有业务逻辑,它们仅用于在服务和EF之间传输对象.它是否正确?我在这里使用通用存储库实现接口.那么你可以扩展通用存储库以满足特殊需求吗?

关于术语的问题
1)业务对象是否等于域对象?域对象应包含多少逻辑?

2)域模型是EF模型吗?我正在使用Model-First方法.

3)依赖注入 - 我应该使用它吗?我理解它是如何工作的,只是没有得到真正的好处.我和Ninject一起玩.

我认为社区将受益于某种包含代码示例的所有最佳实践的wiki.那里有类似的东西吗?很多样本都非常简单,很多微软样本即使在声称时也不使用这种模式.

提前感谢所有拥有并将帮助我的人.

顺便说一句 - 我认为StackOverflow需要一点,"接受答案"复选框旁边的"买我一个啤酒"按钮:)

entity-framework poco repository-pattern service-layer asp.net-mvc-3

23
推荐指数
1
解决办法
4811
查看次数