0

Не могли бы кто-нибудь сказать мне, что не так с этим кодом ниже, потому что у меня возникают проблемы с отношением «один к одному», которое работает с кодом EF 4.3.EF 4.3 code first one-to-one отношения

// Problem with EF 4.3 code first, one-to-one relation 

// context 
// ------------ 
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{  
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

    modelBuilder.Entity<SecondModel>().HasRequired(r => r.FirstModel).WithOptional(r => r.SecondModel).WillCascadeOnDelete(false); 
} 


// models 
// -------- 

public abstract class MyBaseEntity : // some interfaces 
{ 
    // ... 

    [EdmScalarPropertyAttribute(EntityKeyProperty = true, IsNullable = false)] 
    public virtual int Id 
    { 
     get { return GetPropertyValue<int>("Id"); } 
     set { SetPropertyValue<int>("Id", value); } 
    } 

    // ... 
} 

public class FirstModel : MyBaseEntity 
{ 
    // ... 

    public int SecondModelID { get; set; } 
    public virtual SecondModel SecondModel { get; set; } 

    // ... 
} 

public class SecondModel : MyBaseEntity 
{ 
    // ... 

    public int FirstModelID 
    { 
     get { return GetPropertyValue<int>("FirstModelID"); } 
     set { SetPropertyValue<int>("FirstModelID", value); } 
    } 
    public virtual FirstModel FirstModel { get; set; } 

    // ... 
} 

// this code above doesn't seem to work :s 
// when removing FirstModelID and removing SecondModelID i'm unable to create the the database 

пытается все виды вещей, добавляя атрибуты ForeignKey, (ООН), комментирующие некоторые идентификаторы, после проб. Результаты всегда: идентификаторы в базе данных неверны или не создают базу данных.

Заранее спасибо.

+0

значит «пытаются» включают в себя HTTP: //stackoverflow.com/questions/5339951/one-to-one-relationship-on-primary-key-with-entity-framework-code-first? –

ответ

2

У меня нет EF 4.3, но это удивительно, если в этом отношении оно отличается от EF 4.1. Я сделал это с помощью настройки модели в беглом API, перекрывая ModelBuilder, как это внутри класса DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<FirstModel>() 
      .HasRequired(e => e.SecondModel) 
      .WithRequiredPrincipal() 
      .WillCascadeOnDelete(true); 

      base.OnModelCreating(modelBuilder); 

    } 

И классы:

public class FirstModel : MyBaseEntity 
{ 
// ... 

public virtual SecondModel SecondModel { get; set; } 

// ... 
} 

public class SecondModel : MyBaseEntity 
{ 
// ... 

public int Id 
{ 
    get { return GetPropertyValue<int>("FirstModelID"); } 
    set { SetPropertyValue<int>("FirstModelID", value); } 
} 


// ... 
} 
+0

Я действительно должен был работать с моделью. Похоже, что работа с наследством и EF - это PITA .. – juFo

 Смежные вопросы

  • Нет связанных вопросов^_^