не могу вставить сложный объект в базу данных с помощью работы с рамкой - PullRequest
0 голосов
/ 31 марта 2012

Я занимаюсь разработкой приложения asp.net mvc, которое имеет следующие классы enity:

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; }
}

Я определил действие с атрибутом [Httppost], который принимает сложный объект из представления.

Вот действие:

[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(...);

}

Но когда выдается ошибка, как показано ниже:

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

И оператор вставки:

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.

Где находитсяпроблема?

Отредактировано:

Код EntityConfigurations включен:

   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");

          }

    }

Ответы [ 2 ]

0 голосов
/ 31 марта 2012

Попробуйте удалить поля CultureID и PersonID из класса Person_Local.Потому что у вас уже есть поле Человек и культура

0 голосов
/ 31 марта 2012

Похоже, ваша схема не синхронизирована с вашей моделью.Убедитесь, что вы понимаете особенности первого обновления EF Code, которые описаны в этом блоге .Если вам нужна более сложная миграция схемы, есть несколько других подходов в ответах на этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...