2016-04-12 3 views
0

Как я буду создавать сопоставление с использованием свободного API, если архитектура базы данных что-то вроде этого?EF Code First 1 to 1 mapping using Fluent API

public class Users 
{ 
    public Users() 
    {    
     PermanentAddresses = new PermanentAddresses(); 
     TemporaryAddresses = new TemporaryAddresses(); 
    } 
    public int Id { get; set; } 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public virtual PermanentAddresses PermanentAddresses { get; set; } 
    public virtual TemporaryAddresses TemporaryAddresses { get; set; } 
} 

public class PermanentAddresses 
{ 
    // Primary Key and Foreign Key from Users class 
    public string Id { get; set; } 
    // Primary Key and Foreign Key from Addresses class 
    public int AddressId { get; set; } 
    public virtual Users Users { get; set; } 
    public virtual Addresses Addresses { get; set; } 
} 

public class TemporaryAddresses 
{ 
    // Primary Key and Foreign Key from Users class 
    public string Id { get; set; } 
    // Primary Key and Foreign Key from Addresses class 
    public int AddressId { get; set; } 
    public virtual Users Users { get; set; } 
    public virtual Addresses Addresses { get; set; } 
} 

public class Addresses 
{ 
    public Addresses() 
    { 
     PermanentAddresses = new PermanentAddresses(); 
     TemporaryAddresses = new TemporaryAddresses(); 
     Company = new Company(); 
    } 
    public int Id { get; set; }  
    public string CompleteAddress { get; set; } 
    public virtual PermanentAddresses PermanentAddresses { get; set; } 
    public virtual TemporaryAddresses TemporaryAddresses { get; set; } 
    public virtual Company Company { get; set; } 
} 

Я получаю эту ошибку.

Невозможно определить главный конец связи между типами «PermanentAddresses» и «Адресами». Основной конец этой ассоциации должен быть явно сконфигурирован с использованием либо свободного API API, либо аннотаций данных.

ответ

0

Ваш плюрализация делает это казаться, что вы имеете дело с коллекциями, но это в сторону, вы можете попробовать что-то вроде:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<PermanentAddresses>() 
     .HasRequired(pa => pa.Users) 
     .WithRequiredDependent(u => u.PermanentAddresses); 

    modelBuilder.Entity<TemporaryAddresses>() 
     .HasRequired(pa => pa.Users) 
     .WithRequiredDependent(u => u.TemporaryAddresses); 

    modelBuilder.Entity<PermanentAddresses>() 
     .HasRequired(pa => pa.Addresses) 
     .WithRequiredDependent(u => u.PermanentAddresses); 

    modelBuilder.Entity<TemporaryAddresses>() 
     .HasRequired(pa => pa.Addresses) 
     .WithRequiredDependent(u => u.TemporaryAddresses); 
} 

https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449317867/ch04s07.html

0

Спасибо за ваш ответ.

Я добавил этот конфиг

modelBuilder.Entity<PermanentAddresses>().ToTable("PermanentAddresses", "user"); 
modelBuilder.Entity<PermanentAddresses>().HasKey(x => new { x.Id, x.AddressId }); 

modelBuilder.Entity<TemporaryAddresses>().ToTable("TemporaryAddresses", "user"); 
modelBuilder.Entity<TemporaryAddresses>().HasKey(x => new { x.Id, x.AddressId }); 

Просьба проверить это generated Tables and Columns

Я хочу, чтобы указать "Addresses_Id" на "AddressID" и "Users_Id" в "Id"

Однако, если я попытаюсь добавить .Map (p => p.MapKey («Id»)); . Карта (p => p.MapKey ("AddressId"));

modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("Id")); 
modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("AddressId")); 
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("Id")); 
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("AddressId")); 

У меня есть ошибка.

Один или несколько ошибок проверки были обнаружены в процессе генерации модели:

AddressID: Наименование: Каждое имя свойства в типе должно быть уникальным. Имя свойства 'AddressId' уже определено. Id: Имя: каждое имя свойства в типе должно быть уникальным. Идентификатор свойства 'Id' уже определен. AddressId: Name: каждое имя свойства в типе должно быть уникальным. Имя свойства 'AddressId' уже определено. Id: Имя: каждое имя свойства в типе должно быть уникальным. Идентификатор свойства 'Id' уже определен.

+0

Я думаю, что ваша проблема может быть связана с именами ваших внешних ключей, не совпадающими. Вы можете попробовать эту технику здесь modelBuilder.Entity (). HasRequired (pa => pa.Users) .WithMany(). HasForeignKey (pa => pa.Id); См. Http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations –

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