小编jmp*_*pcm的帖子

实体框架4.1:无法从DbQuery转换为ObjectQuery

我有以下代码:

public void DeleteAccountsForMonth(int year, int month)
{
    var result = from acm in this._database.AccountsOnMonth
                 where ((acm.Year == year) && (acm.Month == month))
                 select acm.Id;
    var query = (ObjectQuery<int>)result;

    string sql = string.Format(
        "DELETE FROM [AccountsOnMonth] WHERE [AccountsOnMonth].[Id] IN ({0})",
        query.ToTraceString()
    );

    var parameters = new List<System.Data.SqlClient.SqlParameter>();
    foreach (ObjectParameter parameter in query.Parameters)
    {
        parameters.Add(new System.Data.SqlClient.SqlParameter {
            ParameterName = parameter.Name,
            Value = parameter.Value
        });
    }

    this._database.Database.ExecuteSqlCommand(sql, parameters.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

基本上,我要做的是从上下文中删除大量数据(获取查询结果,获取SQL并执行它).但是,当铸造我有一个问题resultObjectQuery.给出的例外是

无法转换类型为'System.Data.Entity.Infrastructure.DbQuery 1[System.Int32]' to type 'System.Data.Objects.ObjectQuery1 [System.Int32]'的对象.

任何人都可以提供任何解决方案吗?谢谢! …

c# entity-framework ef-code-first

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

ASP.NET MVC 3:具有继承/多态的DefaultModelBinder

首先,对于大帖子(我先尝试做一些研究)和同一问题的混合技术(ASP.NET MVC 3,Ninject和MvcContrib),我感到很遗憾.

我正在使用ASP.NET MVC 3开发一个项目来处理一些客户端订单.

简而言之:我有一些继承自和抽象类的对象,Order当我向控制器发出POST请求时,我需要解析它们.我该如何解决正确的类型?我是否需要覆盖DefaultModelBinder该类,或者还有其他方法可以执行此操作?有人可以提供一些代码或其他链接,如何做到这一点?任何帮助都会很棒!如果帖子令人困惑,我可以做任何改变以表明清楚!

所以,对于我需要处理的订单,我有以下继承树:

public abstract partial class Order {

    public Int32 OrderTypeId {get; set; }

    /* rest of the implementation ommited */
}

public class OrderBottling : Order { /* implementation ommited */ }

public class OrderFinishing : Order { /* implementation ommited */ }
Run Code Online (Sandbox Code Playgroud)

这些类都是由Entity Framework生成的,所以我不会修改它们,因为我需要更新模型(我知道我可以扩展它们).此外,会有更多的订单,但都来自Order.

我有一个通用的view(Create.aspx)来创建一个订单,这个视图为每个继承的订单调用一个强类型的局部视图(在这种情况下OrderBottlingOrderFinishing).我Create()OrderController类上的POST请求定义了一个GET请求的方法和其他方法.第二个是如下:

public class OrderController : Controller
{
    /* rest of the …
Run Code Online (Sandbox Code Playgroud)

c# inheritance mvccontrib ninject-2 asp.net-mvc-3

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

实体框架代码优先:迁移仅在运行时知道的数据库

我正在尝试迁移仅在运行时已知的数据库,这意味着我无法使用程序包管理器控制台来更新数据库.它也不只是一个,而是许多数据库,但它们都是相同的架构:)

我正在使用Ninject生成并在DbContext对象上注入连接字符串.上下文构造函数看起来像这样:

public class MyEntities : DbContext
{
    public MyEntities(string database) : base(database) { }
    /* Properties code omitted. */
}
Run Code Online (Sandbox Code Playgroud)

实例化上下文的方法如下:

public MyEntities GetDatabase(string databaseName, string connectionString)
{
    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
    builder.InitialCatalog = databaseName;

    MyEntities context = this._kernel.Get<MyEntities>(new ConstructorArgument(
        "database", builder.ConnectionString));

    Database.SetInitializer<MyEntities>(
        new MigrateDatabaseToLatestVersion<MyEntities, MyEntitiesMigrationConfiguration>("MyEntities"));

    return context;
}
Run Code Online (Sandbox Code Playgroud)

检索上下文时,该方法创建一个连接字符串,并将其作为参数传递给构造函数MyEntities.我还在方法中指定了我想要的迁移类型(在本例中MigrateDatabaseToLatestVersion).

迁移代码如下:

public partial class MyAccountInMonth : DbMigration
{
    public override void Up()
    {
        AlterColumn("AccountsInMonths", "MovementDebtMonth", c => c.Long(nullable: false));
        AlterColumn("AccountsInMonths", "MovementCreditMonth", c …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc entity-framework

5
推荐指数
1
解决办法
3781
查看次数

使用knockout.js映射插件映射JSON数组&并且视图渲染不起作用

我在将.NET生成的JSON数组映射JavaScriptSerializer到knockout.js时遇到问题.像这样生成数组(为方便起见缩短):

OrderProposalFacade[] proposals = new OrderProposalFacade[order.OrderProposals.Count];

foreach (OrderProposal proposal in order.OrderProposals)
{
    proposals[i++] = new OrderProposalFacade(proposal);
}

ViewBag.OrderProposals = new JavaScriptSerializer().Serialize(proposals);
Run Code Online (Sandbox Code Playgroud)

生成的JSON字符串是这样的:

[{ "ProposalId":1,"ProgrammedWeek":null,
   "ProposalValue":120,"ProposalValueCorrected":130,
   "ProposalDateSent":"01-12-2011","ProposalDateCorrected":"01-12-2011",
   "ServiceId":1,"ServiceDescriptiveId":"OS001","ProposalState":2
 },
 {//another similar object}
]
Run Code Online (Sandbox Code Playgroud)

在ASP.NET MVC视图中,我这样做是为了绑定数组:

var initialData = ko.mapping.fromJSON(<%: new HtmlString(ViewBag.OrderProposals as string) %>);
var viewModel = {
    proposals: ko.observableArray(initialData),
    //some methods; removed to ease reading
};
ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)

问题:proposals阵列应该由knockout.js模板被渲染,但没有呈现.使用Firebug我在initialData阵列上看不到任何对象,因此我假设在初始化时出现错误,因此,proposals.绑定到模板是这样的:

<div id="service-orders" data-bind='template: { name: "proposal-template", foreach: proposals }' style="margin:0 -.7em 0 -0.5em;"></div> …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3 knockout.js

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