我有一个简单的SQL Server表:
CREATE TABLE [dbo].[Table3]
(
[PK] [int] NOT NULL DEFAULT ((0)),
[field1] [varchar](50) NOT NULL DEFAULT (' '),
[field2] [varchar](1) NOT NULL DEFAULT (' '),
CONSTRAINT [Table3_PrimaryKey] PRIMARY KEY CLUSTERED([PK] ASC) ON [PRIMARY]
) ON [PRIMARY]
在SQL Server中,以下查询有效:
INSERT INTO Table3
VALUES (1, 'Test1', ' ')
INSERT INTO Table3
VALUES (2, 'Test2', '')
INSERT INTO Table3 (PK, field1)
VALUES (3, 'Test3')
INSERT INTO Table3
VALUES (4, 'Test4', 'X')
我首先使用Entity Framework 6代码创建了一个控制台应用程序。当我尝试添加新记录时,插入失败并显示“必填字段”错误。似乎空格对于field2无效,但在SQL中它是合法的。
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
try
{
using (Model1 ctx = new Model1())
{
ctx.Database.Log = Console.WriteLine;
Table3 t3 = new Table3();
t3.PK = 1;
t3.field1 = "Test";
t3.field2 = " ";
ctx.Table3.Add(t3);
ctx.SaveChanges();
}
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
Console.Write(ex.Message);
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
}
}
}
模型
namespace ConsoleApplication2
{
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
public partial class Model1 : DbContext
{
public Model1()
: base("name=Model11")
{
}
public virtual DbSet<Table3> Table3 { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Table3>()
.Property(e => e.field1)
.IsUnicode(false);
modelBuilder.Entity<Table3>()
.Property(e => e.field2)
.IsUnicode(false);
}
}
}
表
namespace ConsoleApplication2
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public partial class Table3
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int PK { get; set; }
[Required]
[StringLength(50)]
public string field1 { get; set; }
[Required]
[StringLength(1)]
public string field2 { get; set; }
}
}
由于 米歇尔
答案 0 :(得分:0)
我知道这是一个旧帖子。我今天有类似的问题。我发现添加[Required(AllowEmptyStrings = true)]
会有所帮助。