私のモデル:
public class Post
{
public int PostId { get; set; }
public string Name { get; set; }
public string Content { get; set; }
public int? BlogId { get; set; }
public Blog Blog { get; set; }
}
public partial class PostMap : EntityTypeConfiguration<Post>
{
public PostMap() : base()
{
HasKey(c => c.PostId);
Property(c => c.Content);
Property(c => c.Name).IsRequired();
HasRequired(m => m.Blog)
.WithMany(t => t.Posts)
.HasForeignKey(m => m.BlogId)
.WillCascadeOnDelete(false);
ToTable("Post");
}
}
最初の例:
using (var ctx = new BlogContext())
{
try
{
Post post = new Post { Content = "Content" };
ctx.Posts.Add(post);
ctx.SaveChanges(); // fired DbEntityValidationException "The Name field is required"
}
catch (Exception e) { }
}
2 番目の例:
using (var ctx = new BlogContext())
{
try
{
Post post = new Post { Content = "Content", Name = "Name" };
ctx.Posts.Add(post);
ctx.SaveChanges(); // fired DbUpdateException "Cannot insert the value NULL into column 'BlogId', table 'EntityFramework.dbo.Post'; column does not allow nulls. INSERT fails."
}
catch (Exception e) { }
}
私にはバグのように思えます。最初の例のように DbEntityValidationException が発生しないのに、DbUpdateException が発生するのはなぜですか? DbEntityValidationException を取得する必要があります。BlogId プロパティに [Required] 属性を入れてみました。DbEntityValidationException が発生しますが、Post クラスで属性を使用したくありません。BlogId プロパティの上に Required 属性を使用せずに DbEntityValidationException を取得することは可能ですか?