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
? 以及如何允许null
为Date
的有效值?
Raphael的回答引导我进行另一次搜索。 这就是为什么它不可能(Cobsy回答):
复合主键中可为空的列有什么问题?
简而言之: NULL == NULL
– > false
奇怪的。 我的解决方案是将Id列添加到Model中。
BTW:MySQL允许我不定义主键,然后我被允许有这样的架构 – EF抱怨没有定义键:-(。
对于主键的任何部分,Sql Server或Oracle都不可能。
但是你可以对这些数据有一个独特的约束。
这意味着你可以有一次
UserId = 2, Date = null
然后
UserId = 2, Date =
您无法使用Code First直接创建唯一约束,但请查看SMO。
这不可能。 每个RDBMS要求是,主键必须不可为空。