小编kda*_*awg的帖子

AutoMapper - 继承映射不​​起作用,相同的源,多个目标

我可以在AutoMapper(v2.2)中使用具有相同Source类型但不同Destination类型的映射的继承映射吗?

我有这个基本情况(真正的类有更多的属性):

public abstract class BaseViewModel
{
    public int CommonProperty { get; set;}
}

public class ViewModelA : BaseViewModel
{
    public int PropertyA { get; set; }
}

public class ViewModelB : BaseViewModel
{
    public int PropertyB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ViewModelA并且ViewModelB是同一个Entity类的不同表示:

public class Entity
{
    public int Property1 { get; set; }
    public int Property2 { get; set; }
    public int Property3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想BaseViewModel为每个ViewModel 重用相同的映射,例如:

Mapper.CreateMap<Entity, BaseViewModel>()
    .Include<Entity, ViewModelA>() …
Run Code Online (Sandbox Code Playgroud)

c# inheritance automapper automapper-2

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

EF4 POCO WCF序列化问题(没有延迟加载,代理/无代理,循环引用等)

好的,我想确保我的情况和我彻底尝试的一切.我很确定我能做什么,但我还没有找到成功的完美组合.

我正在使用Entity Framework 4 RTM及其POCO支持.我正在寻找一个实体(Config),它包含与另一个实体(App)的多对多关系.我关闭延迟加载禁用上下文的代理创建,并显式加载导航属性(通过.Include()或.LoadProperty()).但是,当加载导航属性(即,为给定的Config加载Apps)时,已加载的App对象已包含对已带入内存的Configs的引用.这会创建一个循环引用.

现在我知道WCF使用的DataContractSerializer可以通过将preserveObjectReferences参数设置为true 来处理循环引用.我已经尝试过这个我在网上发现的几个不同的属性实现.需要防止"对象图包含循环引用且无法序列化"错误.但是,它不会阻止整个图形的序列化,在Config和App之间来回传递.

如果我通过WcfTestClient.exe调用它,我从客户端得到一个stackoverflow(ha!)异常,我就被软管了.我从不同的调用环境得到不同的结果(C#单元测试与Web服务的本地引用似乎工作正常虽然我仍然可以无休止地在Configs和Apps之间来回钻取,但是从coldfusion环境调用它只返回第一个Config列表中的错误和其他错误.)我的主要目标是有一个序列化的图表表示我明确从EF加载(即:配置列表,每个与他们的应用程序,但没有应用程序回到配置导航.)

注意:我还尝试使用ProxyDataContractResolver技术并保持从我的上下文启用代理创建.这会引发抱怨所遇到的未知类型.我读到ProxyDataContractResolver在Beta2中没有完全工作,但应该在RTM中工作.

对于一些参考,这里大致是我如何查询服务中的数据:

var repo = BootStrapper.AppCtx["AppMeta.ConfigRepository"] as IRepository<Config>;
repo.DisableLazyLoading();
repo.DisableProxyCreation();

//var temp2 = repo.Include(cfg => cfg.Apps).Where(cfg => cfg.Environment.Equals(environment)).ToArray();
var temp2 = repo.FindAll(cfg => cfg.Environment.Equals(environment)).ToArray();
foreach (var cfg in temp2)
{
    repo.LoadProperty(cfg, c => c.Apps);
}

return temp2;
Run Code Online (Sandbox Code Playgroud)

我认为问题的关键在于从实体框架4加载POCO对象的导航属性时,它预先填充了内存中已有对象的导航属性.尽管已经尽一切努力正确处理循环引用,但这反过来又加强了WCF序列化.

我知道这是很多信息,但它确实阻碍了我们在系统中使用EF4/POCO.我发现有几篇文章和博客涉及这些主题,但对于我的生活,我无法解决这个问题.随意简单地提问并帮助我集体讨论这种情况.

PS:为了彻底,我使用Spring .NET的HEAD版本注入WCF服务,以修复Spring.ServiceModel.Activation.ServiceHostFactory.但是我不认为这是问题的根源.

编辑:如果我没有循环引用,ProxyDataContractResolver类可以正常工作.(即:我将App.Configs的setter设置为私有,这会阻止属性的序列化.)当它通过App对象命中Configs时,它会爆炸 - 它们似乎不会被识别为与顶级配置相同的类型.

EDIT2: EF或WCF似乎无法识别出实体确实相等.即:'Config'与特定的'Config.Apps [x] .Configs [y]'相同.实体键在CSDL中为每个模型正确设置,我已经重写了Equals()函数,以根据实体的"Id"属性来比较实体.这符合症状,因为没有抛出循环引用错误,但它确实是一个循环引用(并炸毁WcfTestClient.exe)并且当它到达'Config.Apps [x] .Configs [y]'级别时,ProxyDataContractResolver会爆炸配置.(它不知道如何映射Config代理.ProxyDataContractResolver也可以工作.它就像它知道如何处理第一轮实体,但第二级它认为是不同的实体.)

哇,我可以罗嗦.对不起人!

wcf entity-framework poco entity-framework-4

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

asp.net mvc 2可以将视图呈现为jquery-tmpl模板吗?

我喜欢MS开发的新jQuery插件,模板和DataLinking的想法,并且实际上在我的日常工作中需要它们可能证明有价值.事实上,我需要模板的html是非平凡的html,它通过MVC 2框架利用内置和自定义Html帮助器方法.此外,还有基于绑定ViewModel值的条件呈现.

我可以忠实地将渲染逻辑从MVC视图语法再现到jquery-tmpl语法,其中包括从所使用的MVC辅助函数中找出所有生成的HTML.然而,这既繁琐又耗时.更不用说其他问题,例如服务器端和客户端验证以及其他HTML帮助函数,例如AntiForgeryToken(),尽管这些问题可能会因为限制jquery-tmpl使用而变得明智.

我想知道,我们可以利用MVC局部视图已经定义的逻辑和结构,并让它呈现jquery-tmpl模板而不是直接的HTML吗? 乍一看,似乎是将MVC视图语法转换为jQuery-tmpl语法,保留所有循环,条件等.

这甚至可能吗?我不知道MVC框架,但知道它提供了很好的可扩展性.如果弄明白,这种情况似乎有价值,是吗?或者我甚至不在思考这个问题?有什么想法或建议吗?

asp.net-mvc jquery jquery-templates asp.net-mvc-2

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

将文本绑定到子对象的属性

使用knockout.js,是否可以从服务器绑定到JSON对象的子对象的属性?具体来说,如果我从服务器给出一个如下所示的对象:

var obj = {
    list: [ { key: "a", value: 1 },
            { key: "b", value: 2 },
            { key: "c", value: 3 }        
        ],
    selected: {
        key: "",
        value: null  
    }
};
Run Code Online (Sandbox Code Playgroud)

我通过"映射"插件从这个javascript对象创建一个viewModel:

var viewModel = ko.mapping.fromJS(obj);
Run Code Online (Sandbox Code Playgroud)

我绑定list到这样的<select>标签:

<select data-bind="options: list, optionsText: 'key', 
                   optionsValue: 'value', 
                   value: selected">
</select>
Run Code Online (Sandbox Code Playgroud)

我已将该值指定为selectedviewModel 的属性.这意味着,在选择选项后,我可以成功查询viewModel.selected.key()viewModel.selected.value()在代码中获取最新值.

但是,我无法绑定要在跨度上显示的所选项目keyvalue数据.例如,这不显示我选择的值:

<span data-bind="text: selected.value"></span>
Run Code Online (Sandbox Code Playgroud)

我能做我想做的事吗?我是否需要使用真正的简单模板来建立适当的上下文(即:) selected

我的情况的例子在这里.我甚至尝试将子selected对象专门映射为一个可观察的本身,但没有运气(请参阅注释掉带有附加选项的映射调用).

javascript knockout.js

4
推荐指数
1
解决办法
4448
查看次数

可以在ASP.NET MVC 2中的区域级别进行[授权]吗?

[Authorize]利用控制器和动作上的属性来限制访问是非常棒的.

是否可以在MVC 2中为整个区域执行等效操作?我可以限制区域范围内的访问权限取决于角色/用户/中心位置的任何内容,而不是在所有控制器中乱丢它们?

c# authorization asp.net-mvc-areas asp.net-mvc-2

3
推荐指数
1
解决办法
1310
查看次数

实体框架4 - FunctionImport的ExecuteFunction <T>映射到POCO复杂类型的问题

我在尝试执行a FunctionImport- 结果映射到POCO ComplexType 时收到错误- 来自自定义内部ObjectContext.具体来说,错误说明:

BlahComplexTypeExecuteFunction中的type参数与BlahComplexType函数返回的类型不兼容.

因为我正在使用自定义ObjectContext(我正在使用完全POCO实体框架环境),所以我必须FunctionImport手动调用,我喜欢这样:

var blah = ExecuteFunction<BlahComplexType>("GetBlah", MergeOption.NoTracking,
            new ObjectParameter("p_one", paramOne),
            new ObjectParameter("p_two", paramTwo),
            new ObjectParameter("p_three", string.Empty));
Run Code Online (Sandbox Code Playgroud)

我没有使用任何T4模板来生成POCO,所有类都是手动编写的. BlahComplexType是一个具有简单数据类型属性的类.它的定义与.edmx文件中的ComplexType定义相匹配,包括匹配的命名空间和所有内容(我还有很多其他实体和复杂类型映射到POCO).

msdn文档在这里指出ExecuteFunction<T>必须实现的返回类型IEntityWithChangeTracker,但不是映射到ComplexType而不是实体的整点,正是因为我不关心任何更改(事实上,不允许更改 - BlahComplexType被认为是"价值对象")?

有没有人有幸用ExecuteFunction调用FunctionImport,其结果映射到带有Entity Framework 4的POCO ComplexType?

entity-framework poco entity-framework-4

3
推荐指数
1
解决办法
8307
查看次数

NHibernate Futures有时返回代理,实体其他

我有一个数据库提取,使用多个未来查询处理完整的对象图.它看起来像这样(类名已被更改以保护无辜者):

Foo foo;
var fooFuture = Session.QueryOver<Foo>()
                       .Where(f => f.Id == id)
                       .Future();

// load up the Blah collection for the Foo
Session.QueryOver<Foo>()
       .Fetch(f => f.Blahs).Eager
       .Where(f => f.Id == id)
       .Future();

// do a separate query for the BlahOptions -- this is needed
// because if we did a Join and Join off of Foo, we'd get duplicate Blah
// results and that's not good
Session.QueryOver<Blah>()
       .Fetch(b => b.Options).Eager
       .Where(b => b.Foo.Id == id)
       .Future();

// load up the …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate nhibernate-futures

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