Как сопоставить отношения между родителями и ребенком, где тип ребенка зависит от поля дискриминатора родителей, с рамкиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как сопоставить отношения между родителями и ребенком, где тип ребенка зависит от поля дискриминатора родителей, с рамки

Сообщение Anonymous »

Мне нужно отобразить существующую базу данных, используя структуру Entity 6 для чтения (только (только) данных. /> Я упростил свою реальную ситуацию до самой простой в следующей модели: < /p>
< /p>
  • Код: Выделить всё

    FruitBox
    Таблица владеет дискриминатором столбец, какое значение может быть «банан» или «вишня».
  • Код: Выделить всё

    Fruitbox
    Таблица владеет (вроде) внешней ключом, указывающим на банановое или cherry , в зависимости от дискриминатора value.
Что мне нужно, чтобы реализовать следующее отображение: Это моя реализация:

Код: Выделить всё

[Table("FruitBox")]
public abstract class FruitBox
{
[Key]
public Guid FruitBoxId { get; set; }

/// 
/// Discriminator can be "Banana" or "Cherry"
/// 
public string Discriminator { get; set; }

/// 
/// FK to the "Banana" or "Cherry" child, depending on Discriminator
/// 
public Guid FruitId { get; set; }
}

public class BananaBox : FruitBox
{
public Banana MyBanana { get; set; }
}

public class CherryBox : FruitBox
{
public Cherry MyCherry { get; set; }
}

[Table("Banana")]
public class Banana
{
[Key]
public Guid BananaId { get; set; }
public ICollection MyBananaBoxes { get; set; }
}

[Table("Cherry")]
public class Cherry
{
[Key]
public Guid CherryId { get; set; }
public ICollection MyCherryBoxes { get; set; }
}
< /code>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Map(m => m.Requires("Discriminator").HasValue("Banana"))
.Map(m => m.Requires("Discriminator").HasValue("Cherry"))

modelBuilder.Entity()
.HasRequired(bb => bb.MyBanana)
.WithMany(b => b.MyBananaBoxes)
.HasForeignKey(bb => bb.FruitId);

modelBuilder.Entity()
.HasRequired(cb => cb.MyCherry)
.WithMany(c => c.MyCherryBoxes)
.HasForeignKey(cb => cb.FruitId);
}
< /code>
К сожалению, при попытке прочитать: < /p>
var boxes = this.DbContext.BananaBoxes.ToList()
< /code>
Следующее исключение добавлено: < /p>

system.invalidoperationexception: «Компонент иностранного ключа 'FruitId' не является объявленным свойством на типе 'bananabox'. Убедитесь, что он не был явно исключен из модели и что это действительное примитивное свойство. '

Я попытался переместить свойство FruitId 
из FruitBox в Bananabox (и на Cherry Box

Подробнее здесь: https://stackoverflow.com/questions/795 ... -the-paren
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»