实体框架:复合键的字段不能可空?(Entity Framework: field of compos

2019-06-25 04:53发布

我有一个复合键的模型 - 行是关键:

public class Item
{
    [Key, Column(Order = 0)]
    public int UserId { get; set; }
    [Key, Column(Order = 1)]
    public DateTime? Date { get; set; }
}

运行它下面的代码抛出异常DbEntityValidationException与消息: The Date field is required.

var it = new Item { Date = null, UserId = 2 };
m_Entities.Items.Add(it);
m_Entities.SaveChanges(); // throws exception

m_Entities是平常DbContext被定义为项目后裔DbSet<Item> )为什么Date是否可以要求null (声明DateTime? 而如何让null成为一个有效的价值Date

Answer 1:

从拉斐尔回答导致我到另一个搜索。 这里是为什么它是不可能的(从Cobsy答案):

这有什么错在复合主键空列?

总之: NULL == NULL - >错误

奇怪的。 对我来说,解决方案是增加Id列到模型。

BTW:MySQL的让我无法定义主键,然后我被允许有这样的模式 - EF抱怨没有定义键:-(。



Answer 2:

这不是可能与SQL Server或Oracle的主键的任何部分。

但是你可以对这些DATAS的唯一约束。

这意味着你可以有一个时间

UserId = 2, Date = null

然后

UserId = 2, Date = <NOT NULL>

您不能创建代码第一次直接唯一约束,但看SMO。



Answer 3:

这不可能。 每个RDBMS的要求是,该主键必须是不可为空。



文章来源: Entity Framework: field of composite key cannot be nullable?