Сначала в EF-коде ненулевое отношение «многие к нулю или один»? - PullRequest
1 голос
/ 23 июля 2011

У меня классические отношения «один ко многим», за исключением того, что нет «одного» для каждого элемента со стороны «многих».Вот мои таблицы:

СЕССИИ:

ID        IP
1         1.1.1.1
2         2.2.2.2

ПОЛЬЗОВАТЕЛИ:

IP        NAME
1.1.1.1   John

... сгенерировано изследующие POCO:

public class Session {
    public int     id   { get; set; }
    public long    ip   { get; set; }
}

public class User {
    [Key]
    public long    ip   { get; set; }
    public string  name { get; set; }
    public ICollection<Session> sessions { get; set; }
}

Некоторые сеансы имеют соответствующего пользователя (по IP).Я хотел бы сохранить IP, даже если нет ассоциированного пользователя, и иметь возможность перемещаться по User.sessions.

С POCO выше, EF по понятным причинам сгенерирует FK от Session.ip до * 1021.*, не позволяя мне вставлять сеансы с IP-адресом, который не связан с пользователем.Включение в Session.ip nullable позволяет мне вставлять сеансы, не связанные с пользователем, но затем я теряю IP-адрес (он должен быть нулевым).

Есть ли способ добиться этого?

Aмиллион спасибо.

1 Ответ

1 голос
/ 23 июля 2011

Я бы изменил классы POCO следующим образом:

 public class Session
{
    public int id { get; set; }
    public long ip { get; set; }      
    public User User {get;set;}
}

public class User
{
    [Key]
    public int id { get; set; }
    public long ip { get; set; }
    public string name { get; set; }
    public ICollection<Session> sessions { get; set; }
}

это создаст поле Nullable User_id в таблице сеансов и даст вам желаемые результаты. Пожалуйста, обратите внимание, что это удалило ip как PK в таблице User и изменило его на общий целочисленный идентификатор.

Надеюсь, это поможет!

...