2013-07-12 3 views
1

У меня есть несколько случаев, когда мое свойство навигации повторяется в классе или я не хочу, чтобы оно имело то же имя, что и класс, который он представляет. Пример:Code first - свойство навигации с другим именем, отличным от класса

public class Employee 
{ 
    public Guid EmployeeId { get; set; } 
    public string Name { get; set; } 
} 

public class Project 
{ 
    public Guid ProjectId { get; set; } 
    public DateTime Start { get; set; } 

    public Guid ResponsibleId { get; set; } 
    public virtual Employee Responsible { get; set; } 

    public Guid OwnerId { get; set; } 
    public virtual Employee Owner { get; set; } 
} 

При использовании EF-кода Во-первых, он испортил внешние ключи, создает новые с разными именами. Как я могу справиться с этим?

Большое спасибо!

+0

Где мое определение метаданных? Или, может быть, у вас нет одного и полагаться исключительно на автоматические соглашения? –

+0

Я использую условную конфигурацию. Но если конфигурация может помочь здесь, я все уши. – Anders

+0

Когда вы говорите, что «создает новые с разными именами», что именно он делает? – cadrell0

ответ

0

я в конечном итоге делает это, который работает:

public class Employee 
{ 
    public Guid EmployeeId { get; set; } 
    public string Name { get; set; } 
} 

public class Project 
{ 
    public Guid ProjectId { get; set; } 
    public DateTime Start { get; set; } 

    public Guid ResponsibleId { get; set; } 
    [ForeignKey("ResponsibleId")] 
    public virtual Employee Responsible { get; set; } 

    public Guid OwnerId { get; set; } 
    [ForeignKey("OwnerId")] 
    public virtual Employee Owner { get; set; } 
} 

Благодаря Wiktor за комментарий, что приведет к решению.

1

Это должно помочь:

public class Employee 
{ 
    public Guid EmployeeId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Project> ResponsibleProjects { get; set; } 
    public virtual ICollection<Project> OwnedProjects { get; set; } 
} 

public class Project 
{ 
    public Guid ProjectId { get; set; } 
    public DateTime Start { get; set; } 

    public Guid ResponsibleId { get; set; } 
    public virtual Employee Responsible { get; set; } 

    public Guid OwnerId { get; set; } 
    public virtual Employee Owner { get; set; } 
} 

public YourContext : DbContext 
{ 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Entity<Project>() 
     .HasRequired(p => p.Owner) 
     .WithMany(e => e.OwnedProjects) 
     .HasForeignKey(p => p.OwnerId); 

    modelBuilder.Entity<Project>() 
     .HasRequired(p => p.Responsible) 
     .WithMany(e => e.ResponsibleProjects) 
     .HasForeignKey(p => p.ResponsibleId); 

    base.OnModelCreating(modelBuilder); 
    } 

Обратите внимание, как определены отношения для обеих сторон, и как я указываю, что точное поле используется в качестве внешнего ключа.

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