1

テーブルを作成するための次のSQLがあります。

    public const string dropCreate =
        SET ANSI_NULLS ON
        SET QUOTED_IDENTIFIER ON
        IF EXISTS (SELECT name FROM sys.objects WHERE name = 'Application' AND type = 'U')
            DROP TABLE [dbo].[Application]
        CREATE TABLE [dbo].[Application] (
            [ApplicationId] INT IDENTITY (1, 1) NOT NULL,
            [Name] NVARCHAR (50) Not NULL,
            [RowVersion] [varbinary](max) NULL,
            [ModifiedDate] [datetime] NOT NULL,
            CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
        )";

これが私のクラスです:

public partial class Application
{
    public Application()
    {
        this.TestAccounts = new List<TestAccount>();
    }

    public int ApplicationId { get; set; }
    public string Name { get; set; }
    public byte[] RowVersion { get; set; }
    public System.DateTime ModifiedDate { get; set; }
    public virtual ICollection<TestAccount> TestAccounts { get; set; }
}

マッピング:

    public ApplicationMap()
    {
        // Primary Key
        this.HasKey(t => t.ApplicationId);

        // Properties
        this.Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(35);

        this.Property(t => t.RowVersion)
            .IsRequired()
            .IsFixedLength()
            .HasMaxLength(8)
            .IsRowVersion();

        // Table & Column Mappings
        this.ToTable("Application");
        this.Property(t => t.ApplicationId).HasColumnName("ApplicationId");
        this.Property(t => t.Name).HasColumnName("Name");
        this.Property(t => t.RowVersion).HasColumnName("RowVersion");
        this.Property(t => t.ModifiedDate).HasColumnName("ModifiedDate");
    }

次のように挿入します。

       new TestAccount 
       { 
           Application = app ,
           Name = applicationName, 
           ModifiedDate = DateTime.Now 
       };

それは私に次の例外を与えています

InnerException: System.Data.Entity.Infrastructure.DbUpdateException HResult=-2146233087 Message=タイプ 'Relational.Mappings.Contexts.Application' の null 非許容メンバー 'RowVersion' に対して null ストア生成値が返されました。ソース=EntityFramework

誰かがこれについてアドバイスをくれますか。私の知る限り、すべてを正しく設定しました。

4

2 に答える 2

0

あなたのマッピングのように見えます:

 this.Property(t => t.RowVersion)
        **.IsRequired()**
        .IsFixedLength()
        .HasMaxLength(8)
        .IsRowVersion();

あなたのテーブルとは異なります:

[RowVersion] [varbinary](max) NULL,

それらは一貫している必要があります。

http://msdn.microsoft.com/en-us/library/ms182776.aspxに従って行バージョン列を設定しようとしていますか?

于 2013-03-25T14:41:21.387 に答える
0

RowVersion を TimeStamp に変更します

于 2014-12-22T02:03:50.653 に答える