2012-03-31 5 views
0

mit mir eine asp.net MVC-Anwendung entwickle, die diese enity Klassen hat:kippt einfügen komplexe Objekt-Datenbank ADO.NET Entity Framework

public class Person 
    { 
     public int PersonID { get; set; } 
     public string PersonPicAddress { get; set; } 

     public virtual List<Person_Local> PersonLocal { get; set; } 
} 

public class Person_Local 
{ 
    public int PersonID { get; set; } 

    public int CultureID { get; set; } 

    public string PersonName { get; set; } 

    public string PersonFamily { get; set; } 

    public string PersonAbout { get; set; } 

    public virtual Culture Culture { get; set; } 

    public virtual Person Person { get; set; } 
} 

public class Culture 
{ 
    public int CultureID { get; set; } 

    [Required()] 
    public string CultureName { get; set; } 

    [Required()]  
    public string CultureDisplay { get; set; } 

    public virtual List<HomePage> HomePage { get; set; } 

    public virtual List<Person_Local> PersonLocak { get; set; } 
} 

ich eine Aktion definiert mit [Httppost] Attribute, das komplexe Objekt akzeptiert aus einer sicht. Hier

ist die Aktion:

[HttpPost] 
public ActionResult CreatePerson([Bind(Prefix = "Person")]Person obj) 
     { 

     AppDbContext da = new AppDbContext(); 

     //Only getting first PersonLocal from list of PersonLocals 
     obj.PersonLocal[0].Person = obj; 

     da.Persons.Add(obj); 

     da.SaveChanges(); 

     return Jsono(...); 

} 

Aber wenn wirft es Fehler wie folgt:

Exception:Thrown: "Invalid column name 'Culture_CultureID'." (System.Data.SqlClient.SqlException) 
A System.Data.SqlClient.SqlException was thrown: "Invalid column name 'Culture_CultureID'." 

Und die Insert-Anweisung:

ADO.NET:Execute Reader "insert [dbo].[Person_Local]([PersonID], [PersonName], [PersonFamily], [PersonAbout], [Culture_CultureID]) 
values (@0, @1, @2, @3, null) 
select [CultureID] 
from [dbo].[Person_Local] 
where @@ROWCOUNT > 0 and [CultureID] = scope_identity()" 
The command text "insert [dbo].[Person_Local]([PersonID], [PersonName], [PersonFamily], [PersonAbout], [Culture_CultureID]) 
values (@0, @1, @2, @3, null) 
select [CultureID] 
from [dbo].[Person_Local] 
where @@ROWCOUNT > 0 and [CultureID] = scope_identity()" was executed on connection "Data Source=bab-pc;Initial Catalog=MainDB;Integrated Security=True;Application Name=EntityFrameworkMUE", building a SqlDataReader. 

Wo liegt das Problem?

Edited:

inklusive EntityConfigurations Code:

public class CultureConfig : EntityTypeConfiguration<Culture> 
    { 
     public CultureConfig() 
     { 

      HasKey(x => x.CultureID); 

      Property(x => x.CultureName); 

      Property(x => x.CultureDisplay); 

      ToTable("Culture"); 
     } 
    } 

    public class PersonConfig : EntityTypeConfiguration<Person> 
    { 
     public PersonConfig() 
     { 

      HasKey(x => x.PersonID); 

      Property(x=>x.PersonPicAddress); 

      ToTable("Person"); 
     } 
    } 

    public class Person_LocalConfig : EntityTypeConfiguration<Person_Local> 
    { 
     public Person_LocalConfig() 
     { 
      HasKey(x => x.PersonID); 

      HasKey(x => x.CultureID); 

      Property(x=>x.PersonName); 

      Property(x => x.PersonFamily); 

      Property(x => x.PersonAbout); 

      ToTable("Person_Local"); 

      } 

    } 

Antwort

0

Versuchen Sie, die Felder CultureID und PersonID aus der Person_Local-Klasse zu entfernen. Weil Sie bereits das Feld Person und Kultur haben

+0

Wenn Sie sie entfernen, werden meine Ansichtsvorlagen zerstört. –

+0

Trotzdem ist es falsch, Fremdschlüssel und Links zu Objekten in einer Klasse zu definieren. Sie fügen nur Felder mit Links zu Objekten hinzu. Wenn Sie Fremdschlüssel in Ansichten verwenden, können Sie diese auch verwenden. Verwenden Sie einfach 'Model.Person.PersonID' und' Model.Culture.CultureID'. – pstarkov

+0

Immer noch der gleiche Fehler, selbst wenn diese Int-Eigenschaften entfernt werden. Die Schlüssel, die Sie entfernen möchten, sind Primärschlüssel von Person_Local. –

0

Es sieht aus wie Ihr Schema aus Synchronisierung mit Ihrem Modell. Stellen Sie sicher, dass Sie die ersten Schemaaktualisierungsfunktionen von EF Code kennen, die in this blog beschrieben sind. Wenn Sie eine komplexere Schemamigration benötigen, gibt es einige andere Ansätze in Antworten auf this question.

+0

Es gibt keine Diskrepanz zwischen dem Schema in der Datenbank und was ich in jeder EntityConfiguration einer Entität definiert habe. –

Verwandte Themen