http://blog.csdn.net/weizengxun/article/details/6954482
实例教程,参考下吧。
@model MvcRelationShipTest.Models.News@{
ViewBag.Title = "Edit"
}
<h2>
Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>News</legend>
@Html.HiddenFor(model =>model.Id)
<div class="editor-label">
@Html.LabelFor(model =>model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model =>model.Title)
@Html.ValidationMessageFor(model =>model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model =>model.Content)
</div>
<div class="editor-field">
@Html.EditorFor(model =>model.Content)
@Html.ValidationMessageFor(model =>model.Content)
</div>
<div class="editor-label">
@Html.LabelFor(model =>model.AddTime)
</div>
<div class="editor-field">
@Html.EditorFor(model =>model.AddTime)
@Html.ValidationMessageFor(model =>model.AddTime)
</div>
<div class="editor-label">
@Html.Label("分类")
</div>
<div class="editor-field">
<ul>
@*绑定分类,如果是以选择的 则加载时让他的状态为checked*@
@{List<MvcRelationShipTest.Models.Categories>list = (ViewBag.Categories as List<MvcRelationShipTest.Models.Categories>)
foreach (var item in list)
{
<li>
<label for="@item.Id">@item.Name</label>
@if (Model.Categories.Contains(item))
{
<input type="checkbox" name="CategoryId" value="@item.Id" id="@item.Id" checked="checked" />
}
else
{
<input type="checkbox" name="CategoryId" value="@item.Id" id="@item.Id" />
}
</li>
}
}
</ul>
@*Action("ChcekList", "Categories")*@
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
以常见的权限关系来说,User\Role 2个实体是多对多关系,其POCO类似:View Code
创建服务类似:
ServiceResult UpdateUser(User user)
这时候,我们知道,如果WCF与EF结合使用,有一些注意点:一,WCF传递的需要是POCO类,且不能循环引用(这一点通过在实体类添加[DataContract(IsReference=true)]即可),
二一个问题是EF的延迟加载和代理实例机制,导致EF查询结果并非POCO类,而是代理类,所以需要关系EF代理实例模式:Configuration.ProxyCreationEnabled = false
现在问题来啦,如何实现UpdateUser方法呢,一般我们会用IDbSet.Attach()方法来更新,代码如:
m_DbSet.Attach(entity)
this.DbContext.Entry<T>(entity).State = EntityState.Modified
this.DbContext.SaveChanges()
但是这时候你就会发现,由于EF为了支持WCF服务已经关闭了ProxyCreationEnabled ,所以无论如何,这里的Attach方法是不能执行成功的,
那这时候你会想,那我不采用Attach方法,先Delete实体,再重新添加行不行呢,
NO no no ,由于EF在SaveChanges的时候会根据实体关系,自动修改数据表,所以当你删除User时候的时候会删除User表以及User_Role表中的记录,此时再添加User实体的话,会向User表添加User,User_Role表添加关系,Role表添加Role(因为User.Roles的存在),
这时候你会发现Role表添加Role就不行了,因为记录已经存在了;所以这种方式也不能很好的解决问题!!
怎么办呢,我暂时也不知道怎么办,所以来此求助各位大牛~~看看有什么经验,好的处理方法!
ps:Data Services、Ria services暂时不考虑,因为我的应用需要对具体的 *** 作进行授权!非Web系统!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)