简体   繁体   中英

Entity Framework: field of composite key cannot be nullable?

I have a model with composite key - the row is the key:

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

Running the code below it throws an exception DbEntityValidationException with message: 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 is usual DbContext descendant with Items defined as DbSet<Item> ) Why is the Date required if it can be null (declared as DateTime? ) ? And how to allow null to be a valid value for Date ?

Answer from Raphael lead me to another search. Here is the why it is not possible (answer from Cobsy):

What's wrong with nullable columns in composite primary keys?

In short: NULL == NULL -> false

Wierd. The solution for me is to add Id column into Model.

BTW: MySQL allow me not to define Primary Key, then I'm allowed to have such schema - EF complains about not defining the key :-(.

It's not possible with Sql Server, or Oracle for any part of a primary key.

But you can have a unique constraint on these datas.

Which means you can have one time

UserId = 2, Date = null

Then

UserId = 2, Date = <NOT NULL>

You can't create directly unique constraints with Code First, but look at SMO.

It is not possible. Every RDBMS requirement is, that primary key must be not nullable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM