2015-06-09 169 views
0

我有CustomDBContextSQL映射问题

public class CustomDBContext : DbContext 
    { 
     public CustomDBContext(string connectionString) 
      : base(connectionString) 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 

      ...... 
      modelBuilder.Entity<KeyProd>().ToTable("KeyProd"); 
      ...... 
     } 
    } 

和资源库登记Startup.cs:

..... 
var builder = new ContainerBuilder(); 
builder.Register(c => RepositoryFactory.GetInstance<KeyProd, long>("ef")).As<IRepository<KeyProd, long>>().InstancePerRequest(); 

这个仓库到我的服务的注射后,我尝试新的行添加到数据库:

_keyProductionRepository.Add(new KeyProd 
         { 
          Id = key.Id, 
          Comment = key.Comment, 
          CreatedBy = adminId, 
          DateCreated = DateTime.UtcNow, 
          KeyType = key.KeyType, 
          PageId = key.PageId, 
          Name = key.Name 
         }); 

唯一的例外是: 无法插件将值NULL填充到列'Id',表'ln_resources.dbo.KeyProd';列不允许有空值。 INSERT失败。\ r \ n声明已终止。

我尝试插入的模型有id(3)。不是null.I在调试模式下检查它。

我在SQl中的表没有自动增加的ID。这是表的查询:

CREATE TABLE [dbo].[KeyProd](
    [Id] [bigint] NOT NULL, 
    [Name] [nvarchar](100) NULL, 
    [KeyType] [int] NOT NULL, 
    [Comment] [text] NULL, 
    [PageId] [int] NOT NULL, 
    [CreatedBy] [int] NOT NULL, 
    [DateCreated] [datetime] NOT NULL DEFAULT (getdate()), 
    [DateUpdated] [datetime] NULL DEFAULT (getdate()), 
    [UpdatedBy] [int] NULL, 
PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 

GO 

ALTER TABLE [dbo].[KeyProd] WITH CHECK ADD CONSTRAINT [FK_KeyProd_Page] FOREIGN KEY([PageId]) 
REFERENCES [dbo].[Page] ([Id]) 
GO 

ALTER TABLE [dbo].[KeyProd] CHECK CONSTRAINT [FK_KeyProd_Page] 
GO 

KeyProd类:

public class KeyProd 
    { 
     public long Id { get; set; } 
     public string Name { get; set; } 
     public KeyType KeyType { get; set; } 
     public string Comment { get; set; } 
     public int PageId { get; set; } 
     public int CreatedBy { get; set; } 
     public DateTime DateCreated { get; set; } 
     public int? UpdatedBy { get; set; } 
     public DateTime? DateUpdated { get; set; } 
    } 

如果我尝试从SQL SERVER使用SQL INSERT直接插入此模型中,一切工作正常。 问题在哪里?为什么Id是空的?为什么映射不工作。

+0

请问您可以发布'KeyProd'类的简化版本,包括'Id'字段吗? – mclark1129

+0

嗨迈克C.当然 –

回答

0

您可能需要在KeyProd上注释关键字段以指示您不希望该值由您的上下文自动生成。尝试将DatabaseGeneratedOption.None添加到您的关键属性。

public class KeyProd { 

    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public long Id { get; set; } 

    // ... Other properties 
}