2013-12-07 3 views
0

У меня есть модель, как это:отношения с Entity Framework 5 и .net MVC 4

namespace HiTech.Common.Models{ 
    public class CodeContext : DbContext 
    { 
     public CodeContext(): base("DefaultConnection"){} 

     public DbSet<Code> Codes { get; set; } 
     public DbSet<CodeMember> CodeMembers { get; set; } 
    } 
    public class Code 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 
     public string Description { get; set; } 
     public string EnDescription { get; set; } 
     public virtual ICollection<CodeMember> CodeMembers { get; set; } 
    } 

    public class CodeMember 
    { 

     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 
     public string Description { get; set; } 
     [Required] 
     public int CodeId { get; set; } 
     [ForeignKey("CodeId")] 
     public Code Code { get; set; } }} 

и я использую CodeMember там так:

namespace HiTech.Sales.Customers.Models{ 
    public class CustomerContext : DbContext 
    { 
     public CustomerContext() 
      : base("DefaultConnection") 
     { 

     } 
     public DbSet<Customer> Customers { get; set; } 
    } 
    public class Customer 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 
     [Required] 

     public string CustCode { get; set; } 

     [ForeignKey("IndividualId")] 
     public CodeMember Individual { get; set; } 
     public int IndividualId { get; set; } 
    } 
} 

Мои вопросы:

  1. как я фильтрую Individual из идентификатора кода в моей модели (не в контроллере, например, ниже кода):

    public ActionResult Create() 
    { 
        ViewBag.IndividualId = new SelectList(
          db.CodeMembers.Where(p => p.Code.EnDescription == "Individual"), 
           "Id", "Description"); 
        return View(); 
    } 
    
  2. , когда я ставлю CustomerModel в другом районе, я не могу загрузить или сохранить данные с последовавшей ошибкой:

Exception Details: System.Data.SqlClient.SqlException: Invalid object name dbo.Customers'.
Source Error:
Line 56: {
Line 57: db.Customers.Add(customer);
Line 58: db.SaveChanges();
Line 59: return RedirectToAction("Index");
Line 60:

+0

Как вы создали базу данных? –

+0

База данных Создана автоматически. если таблицы не существуют CodeFirst объекта данных, сделайте их. –

+0

Точно. Какой контекст создает базу данных? –

ответ

0

Начиная со вторым вопросом, несуществующей таблицей. Это потому, что у вас есть два контекста, которые оба знают только части полной модели данных. Вы можете работать с такими bounded contexts, но должен быть один контекст, который «знает» все, поэтому он может генерировать всю базу данных.

Что касается первого вопроса. Если вы имеете в виду, если можно объединить DbSet s из разных контекстов в одном запросе (SQL), ответ будет отрицательным. Если вы хотите создать запрос, который объединяет Customer с Code через CodeMember, вам нужно будет запросить Code + CodeMember в одном запросе и Customer во втором запросе. Но вы можете взять CodeMember от CodeContext и прикрепить его к CustomerContext (обязательно отделите его от CodeContext).

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