我有一个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) 我有一个包含日期和日期时间字段的表单:
@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在设置输入的value属性时如何更改日期格式.
编辑:我发现日期时间格式是通用日期时间格式(yyyy-MM-DDTHH:mmZ),而日期格式是yyyy-MM-dd.可能客户端验证器确实了解通用日期时间,而不是yyyy-MM-dd由于本地化.
我在我的MVC项目的App_Code文件夹中创建了一个全局.cshtml Razor文件来声明@helper函数.问题是我无法在辅助函数中使用Html.ActionLink(或其他扩展).我试图通过@using导入类,但是没有用.有任何想法吗?
我在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(如多对一关系).
我正在尝试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)
错误: …
我正在使用EF Code First 4.3迁移来更新我的数据库方案.现在,我有以下的情况:表A需要被删除,必须创建表B和表A的数据必须被复制到表B(有一些其他数据)我没有访问DbContext的DbMigration类,我的问题是如何实现这个?
在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代码的局部视图,当模型没有错误时关闭模态窗口,但是在我看来这个解决方案不是很整洁.还有其他想法吗?
我已经使用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)
在服务器上我做了以下事情:
有任何想法吗?
entity-framework sql-server-express ef-code-first c#-4.0 entity-framework-4.3
我有以下型号:
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# ×6
linq ×2
linq-to-sql ×2
c#-4.0 ×1
jquery ×1
many-to-many ×1
modal-dialog ×1
one-to-many ×1
razor ×1
validation ×1