Nano Hash - криптовалюты, майнинг, программирование

Как сначала закодировать необязательное отношение «один к одному» в коде EF 4.1 с отложенной загрузкой и одним и тем же первичным ключом в обеих таблицах?

Я работаю с приложением и структурой данных, построенной на ASP/ADO.NET, и я преобразовываю часть этого в ASP.NET MVC. В структуре данных существует необязательное отношение «один к одному», когда обе таблицы используют один и тот же первичный ключ и имя. По сути, эту таблицу можно считать «необязательным расширением» основной таблицы. Вот образцы модели:

public class ZoneMedia
{
    public int ZoneMediaID { get; set; }
    public string MediaName { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }

    public virtual ZoneMediaText MediaText { get; set; }
}

public class ZoneMediaText
{
    public int ZoneMediaID { get; set; }
    public string Text { get; set; }
    public int Color { get; set; }
}

Очевидно, что код EF 4.1 сначала имеет проблему с автоматическим отображением этого. Итак, я понимаю, что должен явно указать отображение. Я пробовал это:

    modelBuilder.Entity<ZoneMedia>()
        .HasOptional(zm => zm.ZoneMediaText);

    modelBuilder.Entity<ZoneMediaText>()
        .HasRequired(zmt => zmt.ZoneMedia)
        .WithRequiredDependent(zm => zm.ZoneMediaText)
        .Map(m => m.MapKey("ZoneMediaID"));

Но это все еще дает мне исключение в отношении имени первичного ключа.

Schema specified is not valid. Errors: 
(199,6) : error 0019: Each property name in a type must be unique. Property name     'ZoneMediaID' was already defined.

Я немного озадачен. Мне нужно адаптироваться к этой нетрадиционной структуре, я понимаю, что в EF 4.1 было бы намного проще просто добавить уникальный PK в необязательное отношение и сохранить отношение внешнего ключа в основной таблице, но я не могу изменить макет базы данных . Любой совет будет принят во внимание.


Ответы:


1

Надеюсь, я хорошо понял.

Это работает для меня:

public class ZoneMedia
{
    public int ZoneMediaID { get; set; }
    public string MediaName { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }

    public virtual ZoneMediaText MediaText { get; set; }
}

public class ZoneMediaText
{
    public int ZoneMediaID { get; set; }
    public string Text { get; set; }
    public int Color { get; set; }

    public virtual ZoneMedia ZoneMedia { get; set; }
}

public class TestEFDbContext : DbContext
{
    public DbSet<ZoneMedia> ZoneMedia { get; set; }
    public DbSet<ZoneMediaText> ZoneMediaText { get; set; }

    protected override void OnModelCreating (DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ZoneMedia>()
            .HasOptional(zm => zm.MediaText);
        modelBuilder.Entity<ZoneMediaText>()
            .HasKey(zmt => zmt.ZoneMediaID);
        modelBuilder.Entity<ZoneMediaText>()
            .HasRequired(zmt => zmt.ZoneMedia)
            .WithRequiredDependent(zm => zm.MediaText);

        base.OnModelCreating(modelBuilder);
    }
}
class Program
{
    static void Main (string[] args)
    {
        var dbcontext = new TestEFDbContext();
        var medias = dbcontext.ZoneMedia.ToList();
    }
}

Это правильно создает FK_ZoneMediaTexts_ZoneMedias_ZoneMediaID в таблице ZomeMediaTexts, а внешний ключ является первичным ключом.

РЕДАКТИРОВАТЬ: возможно, стоит отметить, что я использую EF 4.3.0

24.02.2012
  • Да, это работает. Моя проблема в том, что я пытался использовать .Map для определения ключа, когда я должен был использовать метод .HasKey, как показано в вашем примере. Спасибо за помощь. 24.02.2012
  • В соответствии с документацией MSDN, WithRequiredDependent настраивает отношение как обязательное: требуется со свойством навигации на другой стороне отношения (msdn.microsoft.com/en-us/library/gg671273(v=VS.103).aspx). Это кажется немного хакерским, но это действительно работает. Спасибо, что поделился. 29.04.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..