Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 数据库第一个数据注释问题asp.net mvc 4_Asp.net Mvc_Entity Framework_Asp.net Mvc 4_Data Annotations_Model Validation - Fatal编程技术网

Asp.net mvc 数据库第一个数据注释问题asp.net mvc 4

Asp.net mvc 数据库第一个数据注释问题asp.net mvc 4,asp.net-mvc,entity-framework,asp.net-mvc-4,data-annotations,model-validation,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Data Annotations,Model Validation,我在使用database first方法进行模型验证时遇到问题,我读到Scott Gu的著名著作,但问题是它在我的mvc项目中不起作用,我的Edmx文件在project.model类库中,我的验证类在project.model.Membership命名空间中,我在这里没有真正理解问题的概念。 代码如下: namespace Project.Model //part of generated code by EF database first public partial class Member

我在使用database first方法进行模型验证时遇到问题,我读到Scott Gu的著名著作,但问题是它在我的mvc项目中不起作用,我的Edmx文件在project.model类库中,我的验证类在project.model.Membership命名空间中,我在这里没有真正理解问题的概念。 代码如下:

namespace Project.Model
//part of generated code by EF database first
public partial class Member
{
    public Member()
    {
        this.SideDuties = new HashSet<SideDuty>();
        this.Member_In_Role = new HashSet<Member_In_Role>();
        this.Messages = new HashSet<Message>();
        this.Messages1 = new HashSet<Message>();
    }

    public System.Guid mId { get; set; }
    public byte MemberTypeNo { get; set; }
    public string mName { get; set; }
    public string mLName { get; set; }
    public string mUserName { get; set; }
    public string mPass { get; set; }
    public Nullable<byte> MarriageStatusNo { get; set; }
    public Nullable<byte> GenderNo { get; set; }
    public Nullable<int> mPhone { get; set; }
    public Nullable<long> mMobile { get; set; }
    public Nullable<int> mEmrgPhone { get; set; }
    public Nullable<long> mEmrgMobile { get; set; }
    public string mEmail { get; set; }
    public string mProfilePicExt { get; set; }
    public bool mIsOperator { get; set; }
    public bool mIsAdmin { get; set; }

    public virtual ...
}



namespace Project.Model.membership
//my class handling data annotations, not work!
[MetadataType(typeof(Member_Validation))]
public partial class Member
{

}

//buddy class
[Bind(Exclude = "mId")]
public sealed class Member_Validation
{
    //public System.Guid mId { get; set; }
    public byte MemberTypeNo { get; set; }
    [Required(ErrorMessage = "blah blah")]
    public string mName { get; set; }
    [Required]
    public string mLName { get; set; }
    public string mUserName { get; set; }
    public string mPass { get; set; }
    public Nullable<byte> MarriageStatusNo { get; set; }
    public Nullable<byte> GenderNo { get; set; }
    public Nullable<int> mPhone { get; set; }
    public Nullable<long> mMobile { get; set; }
    public Nullable<int> mEmrgPhone { get; set; }
    public Nullable<long> mEmrgMobile { get; set; }
    public string mEmail { get; set; }
    public string mProfilePicExt { get; set; }
    public bool mIsOperator { get; set; }
    public bool mIsAdmin { get; set; }
}

好的,那么首先,看看这个:

其次,我建议使用ViewModels来验证对象。如下面代码中的快捷方式:

MemberViewModel.cs

然后,将ViewModel发送到编辑/添加视图:

Add.cshtml


通过这种方法,您可以获得清晰的实体模型POCO类,如Member和Domian模型ViewModels,如MemberViewModel,并进行自定义验证。

视图模型很好,但如果我想这样做,最好采用代码优先的方法,因为我先使用数据库,使用视图模型而不是使用生成的模型类是一种额外的工作和代码,我认为它与我的名称空间有关,但我真的不知道如何修复它!不,viewmodels不仅仅适用于代码优先的方法。这也是代码优先和数据库优先使用的模式。谢谢,我认为最好还是把我的头发放在元数据上
public class MemberViewModel
{
    [Required]
    [StringLength(10)]
    public string mName { get; set; }

    [Required]
    public string mLName { get; set; }
}
@Model MemberViewModel //namespace etc.


@using (Html.BeginForm("Add"))
{

@Html.ValidationSummary()
@ViewBag.Status
    @Html.LabelFor(m => m.mName)
    @Html.TextBoxFor(m => m.mName)
    @Html.ValidationMessageFor(m => m.mName)

    @Html.LabelFor(m => m.mLName)
    @Html.TextBoxFor(m => m.mLName)
    @Html.ValidationMessageFor(m => m.mLName)

    <input type="submit" />
}
    [HttpPost]
    public ActionResult Add(MemberViewModel model)
    {

        if (ModelState.IsValid)
        {
            Member memberToAdd = new Member{ };

            memberToAdd.mLName = model.mLName;
            memberToAdd.mName = model.mName;
            (..)

            //some operation, perhaps on database, with memberToAdd

            return RedirectToAction("xyz");
        }
        else
            return View(model);
    }