Используя только код EF 4.0, я хочу установить связь между абстрактным и обычным классом.
У меня есть классы "Item", "ContentBase" и "Test".
ContentBase является абстрактным, а «Test» является его производным.
ContentBase имеет свойство «Item», которое ссылается на экземпляр «Item».
Так что Test.Item или любой класс, производный от ContentBase, имеет свойство навигации Item.
В моей БД каждая запись для Test имеет соответствующую запись для Item.
public class Item
{
public int Id { get; set;}
}
public abstract class ContentBase
{
public int ContentId { get; set;}
public int Id { get; set;}
public Item Item { get; set;}
}
public class Test : ContentBase
{
public string Name { get; set;}
}
теперь немного кода инициализации
public void SomeInitFunction()
{
var itemConfig = new EntityConfiguration<Item>();
itemConfig.HasKey(p => p.Id);
itemConfig.Property(p => p.Id).IsIdentity();
this.ContextBuilder.Configurations.Add(itemConfig);
var testConfig = new EntityConfiguration<Test>();
testConfig.HasKey(p => p.ContentId);
testConfig.Property(p => p.ContentId).IsIdentity();
// the problem
testConfig.Relationship(p => p.Item).HasConstraint((p, q) => p.Id == q.Id);
this.ContextBuilder.Configurations.Add(testConfig);
}
Это дает ошибку:
Ключ зарегистрирован для производного типа «Тест». Ключи должны быть зарегистрированы для корневого типа «ContentBase».
В любом случае, я пытаюсь получить ошибку. Что я делаю не так?