Свободные отображения / аннотации данных для уникальных столбцов и свойств навигации с разными именами в Entity Framework 4.1? - PullRequest
3 голосов
/ 04 мая 2011

Во-первых, есть ли способ сообщить EF 4.1, что столбец должен быть уникальным, используя аннотации данных или свободный API?

Во-вторых, что касается свойств навигации, у меня есть 2 класса Document и User. В классе документа у меня есть свойство для OwnerId (UserId) и свойство для Owner (User). Как мне сообщить EF 4.1, что OwnerId действительно UserId, а Owner - свойство навигации обратно к User?

Класс документа:

public abstract class Document: BaseEntity
    {
        public bool IsActive { get; set; }
        public string Description { get; set; }
        //The UserId
        public Guid OwnerId { get; set; }
        //The User
        public User Owner { get; set; }

    }

1 Ответ

5 голосов
/ 04 мая 2011

Entity Framework вообще не поддерживает уникальные ключи, поэтому ответ на ваш первый вопрос - нет.

OwnerId должен автоматически распознаваться как внешний ключ для Owner, если только вы не сопоставлены с существующей базой данных, в которой внешний ключ назван по-другому. В таком случае вы можете использовать, например:

public abstract class Document: BaseEntity
{
    public bool IsActive { get; set; }
    public string Description { get; set; }
    [Column("UserId"), ForeignKey("Owner")]
    public Guid OwnerId { get; set; }
    public User Owner { get; set; }
}

Возможно, аннотация данных внешнего ключа не нужна, но вы можете использовать ее для явного связывания вашего свойства FK со свойством навигации.

В беглом отображении вы можете использовать:

modelBuilder.Entity<Document>()
            .Property(d => d.OwnerId)
            .HasColumnName("UserId");
modelBuilder.Entity<Document>()
            .HasRequired(d => d.Owner)
            .WithMany(...)
            .HasForeignKey(d => d.OwnerId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...