我在Python 2.7和Django 1.7.1与django-restframework我有一个API,它返回我从数据库采取的一些特定值,它使用这样的自定义序列化器:
class InventarioSerializer(serializers.ModelSerializer):
item = serializers.RelatedField(source='producto.item')
ubicacion = serializers.RelatedField(source='ubicacion.nombre')
class Meta:
model = Inventario
fields = ('epc','item','cantidad','ubicacion')
Run Code Online (Sandbox Code Playgroud)
我的API视图以这种方式调用:
class ItemEnInventarioViewSet(InventarioListModelMixin, viewsets.ModelViewSet):
serializer_class = InventarioSerializer
renderer_classes = (UnicodeJSONRenderer,)
Run Code Online (Sandbox Code Playgroud)
我的ListModelMixin是这样的:
class InventarioListModelMixin(object):
def list(self, request, *args, **kwargs):
item = request.QUERY_PARAMS.get('item', None)
inventario = Inventario.objects.filter(producto__item = item)
if inventario.count() == 0:
return HttpResponse(u"El item %s no se encuentra en el inventario" % item,status=400)
self.object_list = inventario
# Switch between paginated or standard style responses
page = self.paginate_queryset(self.object_list)
if page is not …Run Code Online (Sandbox Code Playgroud) django serialization json django-queryset django-rest-framework
我的问题是我不明白我怎么知道我必须使用Native查询而不是hibernate查询语言?
在访问使用实体框架加载的对象的导航属性时,我最近修复的许多错误都是空引用的结果.我相信我如何设计我的方法一定存在缺陷.这是一个例子......
任务包含许多角色,每个角色引用一个用户.
public class Role
{
public int Id;
public int User_Id;
public string Type;
}
public class User
{
public int Id
public string Name;
}
public class Task
{
public int Id;
public string Name;
public string Status;
public List<Role> Roles;
}
Run Code Online (Sandbox Code Playgroud)
考虑到我会错误地查询我的上下文而没有加载用户 ...
var task = context.Tasks.Include(x=>x.Roles).FirstOrDefault;
Run Code Online (Sandbox Code Playgroud)
然后我称这种方法......
public void PrintTask(Task task)
{
Console.WriteLine(task.Name);
Console.WriteLine(task.Status);
foreach(var r in task.Roles)
{
Console.WriteLine(r.User.Name); //This will throw NRE because User wasn't loaded
}
}
Run Code Online (Sandbox Code Playgroud)
我可能已经构建了这个方法,每个意图加载角色和用户但下次我使用它时我可能会忘记我需要两者.理想情况下,方法定义应该告诉我哪些数据是必要的,但即使我传入任务和角色,我仍然缺少角色 - >用户. …
我的问题很简单,但我不知道如何让Hibernate以我想要的方式运行: - 表MainTable有很多2-One与ParentTable(有100行).MainTable指向ParentTable中100行中的m = 26行
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_ID")
@Fetch(FetchMode.JOIN)
Run Code Online (Sandbox Code Playgroud)
当我简单地查询"来自MainTable"时
它将生成26 + 1个查询
当我跟踪查询时,第一个查询仅加载26个以后查询使用的PARENT_ID.我想它应该有在第一个查询中加载整个PARENT_TABLE的方法..
请假设:
我是Linq的忠实粉丝,我一直非常享受表达树等的力量.但是我发现每当我试图对我的疑问过于聪明时,我在框架中遇到了某些限制:查询可能需要很短的时间内数据库(如通过性能分析器)上运行,结果拿年龄兑现.当发生这种情况时,我知道我太过花哨了,我开始将查询分解成更小,更小的块 - 所以我有一个解决方案,尽管它可能并不总是最优的.
但我想明白:
编辑:根据评论中的要求,这是我在几秒钟内测量在SQL Server上运行的查询示例,但花了将近2分钟来实现.我不会尝试在上下文中解释所有内容; 它就在这里,您可以查看构造并查看我正在谈论的示例:
Expression<Func<Staff, TeacherInfo>> teacherInfo =
st => new TeacherInfo
{
ID = st.ID,
Name = st.FirstName + " " + st.LastName,
Email = st.Email,
Phone = st.TelMobile,
};
var step1 =
currentReportCards.AsExpandable()
.GroupJoin(db.ScholarReportCards,
current =>
new { current.ScholarID, current.AcademicTerm.AcademicYearID },
past => new { past.ScholarID, past.AcademicTerm.AcademicYearID },
(current, past) => new
{
Current = current,
PastCards =
past.Where(
rc =>
rc.AcademicTerm.StartDate <
current.AcademicTerm.StartDate &&
rc.AcademicTerm.Grade == current.AcademicTerm.Grade …Run Code Online (Sandbox Code Playgroud) 在控制器的MVC中,您应该从DB获取Model并将其转换为ViewModel,然后再将其发送到View.通常使用像Automapper这样的东西.
我的问题是,如果你需要在视图中显示模型的所有属性,是否值得创建一个ViewModel?
如果Model和ViewModel需要相同,那么创建ViewModel会在应用程序中创建一些安全性或好处,或者我们只是增加了不必要的复杂性?
我正在设计一个ASP.NET MVC3应用程序,我希望在3层架构中明确区分关注点.我使用Fluent NHibernate作为ORM,Repository模式与NHibernate映射的实体一起使用.我想添加一个具有Unit Of Work模式的适当业务层,保留MVC部分仅用于表示(通过使用通过业务层映射到nHibernate实体的ViewModels). 本文很好地描述了组合的3层和MVC架构.
根据这个MVC +工作单元+存储库文章,我没有看到业务层的明显区别.工作单元类为每个存储库类型提供强类型的getter,它看起来适合业务层.但是,它暴露了一个Save方法,我认为它会转换为使用nHibernate的BeginTransaction和CommitTransaction方法.这引出了一些问题:
1)将事务控制暴露给MVC是一个好主意吗?交易控制应该在哪个阶段发生?在我看来,MVC不应该对交易负责,但如何避免这种情况?
2)是否应该有一些自动处理交易的方法? 此ActionFilter实现是半自动的,但事务控制显然位于MVC部分,而不是业务层.
3)UnitOfWork类与业务层类相同吗?
- 如果是这样,这是否意味着我们可以在其中添加自定义业务逻辑方法?
- 如果没有,我们是否将工作单元包含在包含业务逻辑方法的其他类中?
我感谢任何想法或例子.谢谢.
architecture asp.net-mvc design-patterns unit-of-work fluent-nhibernate
我有JPA实体订单与Customer的ManyToOne关系.它是双向的,因此Customer也有一个OneToMany字段订单.这两个关系都使用EAGER获取(或者在OpenJPA fetchplan中).
当我从Order中选择时,我得到1个订单选择,N选择Customer.orders字段.令我惊讶的是,OpenJPA,EclipseLink和Hibernate存在这个问题,即使我使用JOIN FETCH(它在单向情况下也能工作).
有没有好办法解决这个问题?有没有解决更复杂图形的N + 1选择问题的解决方案?
编辑:我自己的研究结果: - 对于OpenJPA(我正在使用)我还不知道解决方案 - 对于Hibernate @Fetch(FetchMode.SUBSELECT)解决了这个问题.使用@BatchSize也有帮助,它同时选择给定数量的customer.orders字段. - 对于EclipseLink,我发现了类似的功能@BatchFetch(value = BatchFetchType.IN),但在这种情况下没有帮助,我想它无法在双向关系中有效地处理这个问题.
先决条件
我有两张桌子.一个表中的人员列表,以及他们如何在外键查找表中彼此偏好.第一个表只是人员列表.另一个是他们都列出了一些他们宁愿作为室友的人.
表人:
表选择:
题
如何列出与SQL(或PHP)匹配?也就是说,如果一个人也在他想要作为室友的人名单上?基本上你有一个选择列表的选择器.你如何检查选择器是否也在他或她选择的一个列表中?
基本上我想要一个包含每个稳定匹配的报告,也就是选择器也在他或她所选择的至少一个列表中.
我猜一个for循环会做的伎俩,但你怎么会把第一次迭代放在一起?其余的循环少得多?
我有一个相当奇怪的场景.我们在云上托管了一系列WEBAPI.我们在Windows 8应用程序中使用这些服务.问题是当服务在本地运行时需要不到400毫秒,但是当在Windows上托管时,一些请求需要20秒.我检查了数据库表的索引及其罚款.我不知道如何分析什么以及如何提高性能.谢谢!
c# ×3
asp.net-mvc ×2
hibernate ×2
java ×2
performance ×2
.net ×1
architecture ×1
azure ×1
django ×1
jpa ×1
json ×1
lazy-loading ×1
linq ×1
mysql ×1
php ×1
sql ×1
unit-of-work ×1