Я работаю с приложением и структурой данных, построенной на 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 в необязательное отношение и сохранить отношение внешнего ключа в основной таблице, но я не могу изменить макет базы данных . Любой совет будет принят во внимание.