Создание внешнего ключа для сложного типа с использованием кода EF 4.1 сначала fluent-api - PullRequest
2 голосов
/ 24 октября 2011

Ниже указаны мои доменные сущности

public class User
{
    public int Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string EmailAddress { get; set; }

    public RoleType RoleType { get; set; }
}

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Я сделал RoleType как сложный тип (для получения отображения перечисления).Таким образом, я мог бы использовать что-то вроде context.Users.FirstOrDefault(u => u.RoleType.Value == (long)RoleTypes.Admin) RoleTypes.Admin - это сопоставление enum с сущностью Role

public class RoleType
{
    public int Value { get; set; }

    // And all the implicit operators to map with enum
}

И затем я создал отображение, используя свободный интерфейс API

public class RoleTypeMapping : ComplexTypeConfiguration<RoleType>
{
    public RoleTypeMapping()
    {
        Property(r => r.Value)
            .HasColumnName("RoleId"); // To make sure that in RoleType property of User EF entity maps to an int column [RoleId] in database (table [Users])
    }
}

Используя fluent-api, я хочу создать ассоциацию внешнего ключа в таблице [Users] для [Users]. [RoleId], ссылаясь на [Role]. [Id].Пожалуйста, кто-нибудь может дать мне руководство для получения этого

Я устал добавлять свойство типа Role и создавать отображение через fluent-api, но EF создает другой столбец Role_Id и делает его внешним ключом.Я хочу, чтобы существующий столбец [RoleId] (сложный тип) был внешним ключом

1 Ответ

3 голосов
/ 24 октября 2011

Это невозможно.Если вы хотите иметь связь с таблицей ролей, вы должны отказаться от своего подхода, подобного перечислению, и определить сущность «Пользователи», например:

public class User
{
    public int Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string EmailAddress { get; set; }

    public Role Role { get; set; }
}

Прежде всего, отношения не являются перечислениями, и сложные типы не могут содержать свойства навигации (а такжевнешние ключи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...