1

最初に EF コードで ASP.NET MVC を使用しています。

私のモデルには、null になる可能性のあるプロパティがあります。

    public byte[] Avatar { get; set; }

ただし、 update-database を実行すると、次のようになります。

値 NULL を列 'Avatar'、テーブル 'temp' に挿入できません。列はヌルを許可しません。更新は失敗します。

必要なプロパティを指定するデータ注釈はありません。また、プロパティは外部キーでもありません。

何か案は?

さらなるアップデート:

データベースを削除し、「update-database -verbose」を使用して新しいデータベースを強制的に作成すると、作成中のテーブルが特にフィールドに NOT NULL フラグを強制することがわかります。

CREATE TABLE [dbo].[UserProfile] (
    [UserId] [int] NOT NULL IDENTITY,
    [UserName] [nvarchar](max),
    [FirstName] [nvarchar](50) NOT NULL,
    [LastName] [nvarchar](50) NOT NULL,
    [EmailAddress] [nvarchar](50) NOT NULL,
    [WorkPhone] [nvarchar](20),
    [MobilePhone] [nvarchar](20),
    [HireDate] [datetime],
    [Avatar] [image] NOT NULL,
    [AvatarMimeType] [nvarchar](max),
    CONSTRAINT [PK_dbo.UserProfile] PRIMARY KEY ([UserId])
)

私の完全なモデル:

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }

    [Required]
    [Display(Name = "First name")]
    [MaxLength(50, ErrorMessage = "First Name cannot be longer than 50 characters.")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Last Name")]
    [MaxLength(50, ErrorMessage = "Last Name cannot be longer than 50 characters.")]
    public string LastName { get; set; }

    [Display(Name = "Full Name")]
    public string FullName
    {
        get
        {
            return FirstName + " " + LastName;
        }
    }

    [Required]
    [RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9]+(\\.[a-z0-9]+)*\\.([a-z]{2,4})$", ErrorMessage = "Not a valid email address")]
    [Display(Name = "Email Address")]
    [MaxLength(50, ErrorMessage = "Email Address cannot be longer than 50 characters.")]
    public string EmailAddress { get; set; }

    [Display(Name = "Work Phone")]
    [MaxLength(20, ErrorMessage = "Work Phone cannot be longer than 20 characters.")]
    public string WorkPhone { get; set; }

    [Display(Name = "Mobile Phone")]
    [MaxLength(20, ErrorMessage = "Mobile Phone cannot be longer than 20 characters.")]
    public string MobilePhone { get; set; }

    [Display(Name = "Hire Date")]
    [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? HireDate { get; set; }

    [ValidateFile(ErrorMessage = "Please select a PNG, JPG or GIF image smaller than 2MB")]
    [Column(TypeName = "image")]
    public byte[] Avatar { get; set; }

    public string AvatarMimeType { get; set; }
4

4 に答える 4

2
[Column(TypeName = "image")]
public byte[] Avatar { get; set; }

この方法で使用していることを EF に伝える必要があると思います。上記の画像注釈を使用してみてください。

これにより、フィールドが画像タイプとして作成されます。このタイプのシナリオ用に設計されています。

編集:最終的に機能した回答については、コメントを参照してください。

于 2013-05-21T12:18:30.493 に答える
1

直接的な答えではないかもしれませんが、有用な回避策です。エンティティを作成するときは、アバター フィールドを初期化します。

    public void CreateSomething(Something something)
    {

       something.Avatar= new byte[0],   
       Db.Somethings.Add(something);
       Db.SaveChanges();
    }

EF Avatar は現在 null ではないため、すべて問題ありません。うまくいけば、それは役に立ちます。

于 2013-05-21T12:45:10.783 に答える
1

byte[]からに変更しますbyte?[]

于 2020-09-26T11:10:32.940 に答える
0

ここに記載されている解決策を試してください: null 許容データ型と null でないデータ型を変更するためのデータ注釈は何ですか?

IE: からbyte[]に変更byte?

乾杯

于 2013-05-21T11:46:20.460 に答える