EF4 Code First: как добавить отношения без добавления свойства навигации

Как определить отношения, используя Code First, но без использования каких-либо свойств навигации?

Раньше я определил одно-много и много-много, используя свойства навигации в обоих концах отношения. И соответствующие отношения создаются в базе данных. вот урезанная версия того, как выглядят classы (для простоты я преобразовал отношения Many-Many в one-many).

public class User { public string UserId { get; set; } public string PasswordHash { get; set; } public bool IsDisabled { get; set; } public DateTime AccessExpiryDate { get; set; } public bool MustChangePassword { get; set; } public virtual Role Role { get; set; } } public class Role { public int RoleId { get; set; } public string Name { get; set; } public string Description { get; set; } public virtual ICollection Users { get; set; } public virtual ICollection Rights { get; set; } } public class Right { public Guid RightId { get; set; } public string Name { get; set; } public string Description { get; set; } public virtual Role Role { get; set; } } 

Однако, если я удаляю свойства навигации, отношения не создаются. Вот как выглядят classы.

 public class User { public string UserId { get; set; } public string PasswordHash { get; set; } public bool IsDisabled { get; set; } public DateTime AccessExpiryDate { get; set; } public bool MustChangePassword { get; set; } public int Role RoleId { get; set; } } public class Role { public int RoleId { get; set; } public string Name { get; set; } public string Description { get; set; } } public class Right { public Guid RightId { get; set; } public string Name { get; set; } public string Description { get; set; } public int RoleId { get; set; } } 

обратите внимание, что вместо свойства навигации у меня есть первичный ключ связанной таблицы. Все создается на столе – кроме отношений. Итак, как мне это сделать?

Кстати, я пробовал различные комбинации в методе OnModelCreating для dbcontext, но безрезультатно. Любая помощь высоко ценится!

Спасибо, Мел

Я считаю, что вам всегда нужно свойство навигации, по крайней мере, с одной стороны при использовании кода. Затем вы сможете сопоставить его:

 public class User { public string UserId { get; set; } public string PasswordHash { get; set; } public bool IsDisabled { get; set; } public DateTime AccessExpiryDate { get; set; } public bool MustChangePassword { get; set; } public int RoleId { get; set; } public Role Role { get; set; } } public class Role { public int RoleId { get; set; } public string Name { get; set; } public string Description { get; set; } } public class Right { public Guid RightId { get; set; } public string Name { get; set; } public string Description { get; set; } public int RoleId { get; set; } public Role Role { get; set; } } public class TestContext : DbContext { public TestContext() : base("Entities") {} protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .HasRequired(r => r.Role) .WithMany() .HasForeignKey(r => r.RoleId); modelBuilder.Entity() .HasRequired(r => r.Role) .WithMany() .HasForeignKey(r => r.RoleId); } } 

Вы можете использовать свободный api, чтобы добавить отношения, хотя код «конфигурации» отделен от кода сущности, что делает его менее доступным.

В EF 4.3 вы можете добавить миграцию, которая добавляет отношения.

Interesting Posts

Как различные политики хранения влияют на мои annotations?

Проблема с кодировкой Java FileReader

Как найти индекс строки в таблице с помощью jquery

Готовые заявления MS Access

Как изменить диакритические символы на недиакритические

как иметь дело с google-картой внутри скрытого div (обновленное изображение)

IE9 jQuery AJAX с CORS возвращает «Доступ запрещен»

Предупреждение об ошибке «Захват сильно в этом блоке, вероятно, приведет к циклу сохранения» в коде с поддержкой ARC

Как убить все запущенные приложения в Android?

Регулярное выражение для поиска и замены в Microsoft Word

Как подсчитать все строки при использовании SELECT с LIMIT в запросе MySQL?

Json.net сериализует определенное частное поле

Клиенты REST для Java?

Как получить доступ к базе данных h2 из одного загрузочного приложения весны из другого приложения загрузки весны

Не удается установить pg gem на Mountain Lion

Давайте будем гением компьютера.