2017-06-15 7 views
0

デフォルト値の設定を持つモデル内の特定の列のデータ型を変更する必要があります。デフォルト値を持つmvcモデルのプロパティのデータ型を変更する

public class Customer 
{ 
    public int CustomerId { get; set; } 

    [MaxLength(50, ErrorMessage ="Please enter customer's last name")] 
    [Display(Name = "Last name")] 
    [Column(TypeName = "varchar")] 
    public string Lastname { get; set; } 

    [MaxLength(50, ErrorMessage = "Please enter customer's first name")] 
    [Display(Name = "First name")] 
    [Column(TypeName = "varchar")] 
    public string Firstname { get; set; } 

    [Column(TypeName = "float")] 
    public double Points { get; set; } 

    public string UserId { get; set; } 
    [Display(Name = "Id Type Presented")] 
    public int IdTypeId { get; set; } 

    [ForeignKey("UserId")] 
    public virtual ApplicationUser User { get; set; } 

    [ForeignKey("IdTypeId")] 
    [Display(Name = "Id Type")] 
    public virtual IdType IdType { get; set; } 

    [Required] 
    [Display(Name = "Status")] 
    public int StatusTypeId { get; set; } 

    [ForeignKey("StatusTypeId")] 
    [Display(Name = "Status")] 
    public virtual StatusType StatusType { get; set; } 

    [Required] 
    [Display(Name = "Id Number")] 
    [MaxLength(20, ErrorMessage = "Id number is required for verification")] 
    [Column(TypeName = "varchar")] 
    public string IdNumber { get; set; } 

    public Customer() 
    { 
     this.Lastname = ""; 
     this.Firstname = ""; 
     this.IdNumber = ""; 
    } 
} 

それが言うので、上記のコンストラクタの3列は、データベースの更新から私を妨げている。ここで

The object 'DF__Customers__IdNum__31EC6D26' is dependent on column 'IdNumber'. 
ALTER TABLE ALTER COLUMN IdNumber failed because one or more objects access this column. 

が生成された移行スクリプトが

public partial class setdatatypestovarcharincustomerstablewhereapplicable : DbMigration 
{ 
    public override void Up() 
    { 

     AlterColumn("dbo.Customers", "Lastname", c => c.String(maxLength: 50, unicode: false)); 
     AlterColumn("dbo.Customers", "Firstname", c => c.String(maxLength: 50, unicode: false)); 
     AlterColumn("dbo.Customers", "IdNumber", c => c.String(nullable: false, maxLength: 20, unicode: false)); 
    } 

    public override void Down() 
    { 
     AlterColumn("dbo.Customers", "IdNumber", c => c.String(nullable: false, maxLength: 20)); 
     AlterColumn("dbo.Customers", "Firstname", c => c.String(maxLength: 50)); 
     AlterColumn("dbo.Customers", "Lastname", c => c.String(maxLength: 50)); 
    } 
} 

である私はこれをどのように行うことができます?制約を移行スクリプト内にドロップしてから再作成することはできますか?

おかげ

+0

まず、コンストラクタを削除すると言っています。また、 'public string Lastname {get;}のようにプロパティ値の最後にデフォルト値を設定することもできます。セット; } = "";しかし、実際にはあなた自身の質問に既に答えています。他の人と関連性のない質問です。だから代わりにそれを削除してみませんか? – Edward

答えて

0

は、ここに私がやったことです。移行スクリプト内でdefaultValueを設定します。

public override void Up() 
{    
    AlterColumn("dbo.Customers", "Lastname", c => c.String(nullable: false, maxLength: 50, unicode: false, defaultValue: "")); 
    AlterColumn("dbo.Customers", "Firstname", c => c.String(nullable: false, maxLength: 50, unicode: false, defaultValue: "")); 
    AlterColumn("dbo.Customers", "IdNumber", c => c.String(nullable: false, maxLength: 20, unicode: false, defaultValue: "")); 
} 
関連する問題