实体框架:复合键的字段不能为空?

Zok*_*oka 17 c# entity-framework ef-code-first asp.net-mvc-3

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

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

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

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

(m_Entities通常是子DbContext项,定义为项目DbSet<Item>)Date如果可以null(声明为DateTime?),为什么需要?以及如何允许null成为有效值Date

Zok*_*oka 11

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

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

简而言之: NULL == NULL- >假

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

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