小编Mar*_*ijn的帖子

如何更新实体框架中的相关实体

我有一个MVC项目,并为数据库使用Entity Framework Code First和POCO对象.例如:

public class ClassA
{
  public int? Id {get; set;}
  public string Name { get; set;}
  public virtual ClassB B {get; set;}
}

public class ClassB
{
  public int? Id {get;set;}
  public string Description {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我有一个ActionResult,可以创建或编辑模型.问题是当我调用此ActionResult更新模型并且model.B已更改时,关系不会保存在数据库中.当调用ActionResult来创建一个新对象时,它按预期工作.我该如何解决这个问题?

public ActionResult Save(ClassA model)
{
  model.B = GetBFromDb(model.B.Id.Value);

  if(ModelState.IsValid)
  {
    if (id.HasValue)
    {
      context.Entry(model).State = System.Data.EntityState.Modified;
    }
    else
    {
      context.ClassAs.Add(model);
    }
    context.SaveChanges();
    // redirect to index etc.
  }
  return View("EditForm", model);
}
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first asp.net-mvc-3

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

输入类型日期的客户端验证不起作用

我有一个包含日期和日期时间字段的表单:

@Html.TextBoxFor(model => model.A, new { @type = "datetime" })
@Html.TextBoxFor(model => model.B, new { @type = "date" })
Run Code Online (Sandbox Code Playgroud)

模型:

public class TestModel
{
  [DataType(DataType.Date)]
  public DateTime A {get;set;}

  [DataType(DataType.Date)]
  public DateTime B {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

通过使用这些输入类型,iPad显示了不错的日期(时间)选择器.使用客户端验证验证字段.对于datetime字段(A),它可以工作,但是日期字段(B)将引发错误:"请输入有效日期." 我该如何解决这个问题?

例子:

  • 此日期时间的iPad(Safari)值有效(根据MVC客户端验证):15 dec.2011 9:20
  • 此日期的iPad(Safari)值无效:15 dec.2011

在iPad上调试代码很难,所以我不知道Safari在设置输入的value属性时如何更改日期格式.

编辑:我发现日期时间格式是通用日期时间格式(yyyy-MM-DDTHH:mmZ),而日期格式是yyyy-MM-dd.可能客户端验证器确实了解通用日期时间,而不是yyyy-MM-dd由于本地化.

c# validation unobtrusive-validation asp.net-mvc-3

7
推荐指数
1
解决办法
4484
查看次数

Html.ActionLink不能在全局Razor助手中使用

我在我的MVC项目的App_Code文件夹中创建了一个全局.cshtml Razor文件来声明@helper函数.问题是我无法在辅助函数中使用Html.ActionLink(或其他扩展).我试图通过@using导入类,但是没有用.有任何想法吗?

c# razor asp.net-mvc-3

6
推荐指数
1
解决办法
1850
查看次数

同时使用多对多和一对多同一实体

我在EF Code-First中有一个多对多的关联(正如问题中所解释的那样),我也希望对同一个实体使用一对多关系.问题是EF无法生成正确的数据库方案.码:

public class A
{
  public int Id { get; set; }
  public string Name { get; set; }
  public virtual ICollection<B> ObjectsOfB { get; set; }
}

public class B
{
  public int Id { get; set; }
  public virtual A ObjectA { get; set; }
  public virtual ICollection<A> OtherObjectsOfA { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我删除B类的ObjectA属性时,会正确生成多对多关联.当生成不正确时,实体B获得2个外键到A,实体A获得1个外键到B(如多对一关系).

c# many-to-many entity-framework one-to-many

6
推荐指数
1
解决办法
4306
查看次数

LINQ多对多交叉口

我正在尝试Posts基于以下列表进行查询Tags:

public class Post
{
  public int? Id {get;set;}
  public string Name {get;set;}
  public virtual ICollection<Tag> Tags {get;set;}
}
public class Tag
{
  public int? Id {get;set;}
  public string Name {get;set;}
  public vritual ICollection<Post> Posts {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在我想根据标签列表返回帖子: IList<Tag> searchTags = ParseTagsFromSearchString("tag1,tag2,tag3"); // this function checks the tags in the database, so all the primary keys are available in the list

当帖子包含一个或多个也存在于searchTags其中的标签时,应包含在结果中.我尝试过以下方法:

var q = from s in Context.Registrations
                    where s.Tags.Intersect(tagList)
                    select s;
Run Code Online (Sandbox Code Playgroud)

错误: …

c# linq entity-framework linq-to-sql

6
推荐指数
1
解决办法
1976
查看次数

实体框架4.3迁移移动现有数据

我正在使用EF Code First 4.3迁移来更新我的数据库方案.现在,我有以下的情况:表A需要被删除,必须创建表B和表A的数据必须被复制到表B(有一些其他数据)我没有访问DbContextDbMigration类,我的问题是如何实现这个?

entity-framework ef-code-first ef-migrations

6
推荐指数
1
解决办法
2726
查看次数

关闭包含ASP MVC Ajax表单的模式窗口

在webapp中我在模态窗口中使用ASP MVC Ajax表单.我没有使用任何特定的jQuery代码,只有一些打开模态窗口(即showModal()函数):

@Ajax.ActionLink("Open", "Add", "Home", new {id = Model.Id}, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "modal", OnSuccess = "showModal()"})
Run Code Online (Sandbox Code Playgroud)

此代码将我的表单(部分视图)加载到div中,并将其作为模态窗口打开.在提交ActionResult的表单中,我只使用默认的ModelState对象来验证它,如果出现错误,我将返回包含模型错误的相同局部视图.除以下情况外,此方法正常:当模型不包含错误时,我想自动关闭模态窗口.我尝试了以下方法:

@using (Ajax.BeginForm("Save", "Home", new AjaxOptions {HttpMethod = "POST", UpdateTargetId = "modal", OnSuccess = "hideModal(); alert('Saved');"}))
Run Code Online (Sandbox Code Playgroud)

但是,当模型包含错误时,Ajax调用仍然有效,因此将调用OnSuccess.我试图通过在局部视图中发送错误HttpStatusCode来解决这个问题,但是不会使用新的html更新div.我认为唯一的解决方案是发送一个包含javascript代码的局部视图,当模型没有错误时关闭模态窗口,但是在我看来这个解决方案不是很整洁.还有其他想法吗?

jquery modal-dialog asp.net-mvc-3

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

实体框架4.3与SQL Server Express迁移异常

我已经使用Entity Framework 4.3项目为我的ASP.NET MVC设置了一个(远程)SQL Server Express.在我的本地机器上使用SQL Compact一切正常.当我尝试连接到SQL Express服务器时,我在调用时遇到以下错误migrator.Update():

The INSERT permission was denied on the object '__MigrationHistory', database 'MyDataBase', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)

在服务器上我做了以下事情:

  • 使用SQL Server凭据创建用户
  • 创建了一个名为MyDataBase的数据库

有任何想法吗?

entity-framework sql-server-express ef-code-first c#-4.0 entity-framework-4.3

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

LINQ组按日期递减,并按时间递增

我有以下型号:

public class A
{
  public int? Id {get;set;}
  public DateTime Start {get;set;}
  public DateTime End {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在我想按日期对所有条目进行分组,并按降序每个日期对它们进行排序,并按升序排序(使用LINQ).示例输出:

Jan 3. 2012
-- 10:00-11:00
-- 11:00-13:00
Jan 2. 2012
-- 10:00-11:00
-- 12:00-15:00
Jan 1. 2012
-- 9:00-10:00
-- 12:00-13:00
Run Code Online (Sandbox Code Playgroud)

是否有可能在LINQ-to-SQL中实现这一点,或者在执行查询后(在结果列表中)是否必须执行此操作?

c# linq entity-framework linq-to-sql

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