entity framework:复合键的字段不能为空?

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

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

运行下面的代码会抛出exceptionDbEntityValidationException并带有消息: 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 )如果Date可以为null (声明为DateTime? ),为什么需要Date ? 以及如何允许nullDate的有效值?

Raphael的回答引导我进行另一次搜索。 这就是为什么它不可能(Cobsy回答):

复合主键中可为空的列有什么问题?

简而言之: NULL == NULL – > false

奇怪的。 我的解决方案是将Id列添加到Model中。

BTW:MySQL允许我不定义主键,然后我被允许有这样的架构 – EF抱怨没有定义键:-(。

对于主键的任何部分,Sql Server或Oracle都不可能。

但是你可以对这些数据有一个独特的约束。

这意味着你可以有一次

 UserId = 2, Date = null 

然后

 UserId = 2, Date =  

您无法使用Code First直接创建唯一约束,但请查看SMO。

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