我正在开发一个带有剃刀的asp.net mvc3演示应用程序,该应用程序托管在http://portfolio-6.apphb.com/Projects
我有mvc脚手架,Poco对象作为实体和mvc脚手架运行。
public class Project
{
public int ProjectId { get; set; }
[Required(ErrorMessage="please enter name")]
public string Name { get; set; }
public string Url { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime UpdatedOn { get; set; }
public bool isFeatured { get; set; }
public bool isDisabled { get; set; }
public int GroupId { get; set; }
public virtual Group Group { get; set; }
[Required(ErrorMessage="Please select atleast one tag")]
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public int TagId { get; set; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime UpdatedOn { get; set; }
public virtual ICollection<Project> Projects { get; set; }
}
public class Group
{
public int GroupId { get; set; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime UpdatedOn { get; set; }
public virtual ICollection<Project> Projects { get; set; }
}
第一个问题 从上面的代码中你可以看到我在Project和Tag实体之间有很多关系。 现在我可以实现新项目功能,其中一个错误是标记为必需的项目的标签属性,但如果您没有选择任何标记,则客户端站点验证不起作用。
第二个问题 一旦使用mutliple标签创建项目,如果您决定编辑它,如何显示与项目相关的选定标签???
您可以在https://github.com/najamsk/PortfolioManger
找到完整的源代码
答案 0 :(得分:1)
我已经设法进行验证工作,现在在编辑项目时选择了标签。
但现在我遇到了另一个问题,我可以说我创建了一个带有标签“asp.net”的新项目,然后我编辑项目并选择一个标签“wordpress”。现在,如果我发布表单模型绑定工作,但我的上下文不能更新项目的标签集合属性?在我看来,当它为我的Project实体找到一个复杂的类型属性时,实体框架会在这里产生问题吗?
public void InsertOrUpdate(Project project)
{
if (project.ProjectId == default(int)) {
// New entity
foreach (var tag in project.Tags)
{
context.Entry(tag).State = EntityState.Unchanged;
}
context.Projects.Add(project);
}
else {
// Existing entity
//every property of project entity is
//getting updated only tags property left out :(
context.Entry(project).State = EntityState.Modified;
}
}