Entity Framework & MVC - вставка в несколько таблиц с использованием внешних ключей - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть две таблицы, Property и PropertyMeta.Они связаны значением PropertyID.Я только начал использовать ASP.net MVC и в настоящее время использую MVC2 (из-за ограничений хостинг-провайдера).На простой странице создания я пытаюсь заполнить обе таблицы, но мне совсем не везет.

[HttpPost, Authorize]
    public ActionResult Create(PropertyViewModel property)
    {
        try
        {

            MyEntities db = new MyEntities();

            Property _property = new Property();
            _property = property.Properties;

            PropertyMeta _meta = new PropertyMeta();
            _meta.Property = _property;
            _meta = property.Meta;

            db.AddToProperties(_property);
            db.AddToPropertyMetas(_meta);
            db.SaveChanges();   

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

Я пробовал вышеизложенное, но оно не работает.Это раздражает, это должно быть так просто, но я застрял.Кто-нибудь может подумать, что может быть не так с вышесказанным?Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

1 голос
/ 13 сентября 2011

Является ли PropertyViewModel.Properties типа Property? Я предполагаю, что проблема в этих двух строках кода, так как кажется, что нет смысла создавать новый Property и сразу назначать ему property.Properties.

Property _property = new Property();
_property = property.Properties;
0 голосов
/ 15 сентября 2011

Ваша проблема не в том, что Entity Framework слишком сложен, вы, похоже, плохо понимаете, как в целом работает C #, учитывая, что вы создаете новые переменные и сразу перезаписываете их значениями различных типов (даже не знаете, как что компилируется).

У вас есть несколько проблем:

Property _property = new Property(); 
_property = property.Properties; 

Это создает новый _property. Затем вы назначаете новое свойство поверх того, которое вы только что создали. Вам не следует использовать объект модели предметной области в вашей модели представления, но это не совсем ваша проблема.

Вы можете просто сделать это:

Property _property = property.Properties;

Далее у вас есть эта проблема:

PropertyMeta _meta = new PropertyMeta();      
_meta.Property = _property; 
_meta = property.Meta; // overwrites the value assigned above

Опять же, вы перезаписываете объекты, которые вы только что создали. Так что это равнозначно:

PropertyMeta _meta = property.Meta;
_meta.Property = _property;

Наконец, вот последний бит:

db.PropertyMetas.Add(_meta);             
db.SaveChanges();

EF автоматически добавит свойство в таблицу, поскольку оно связано с вашей таблицей _meta.Property, поэтому вы не добавите его явно.

0 голосов
/ 13 сентября 2011

вы перезаписываете свое значение.

_meta.Property = _property; //sets an individual property
_meta = property.Meta; //Overwrites all properties

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

_meta = property.Meta; //Overwrites all properties
_meta.Property = _property; //sets an individual property

После прочтения вашего комментария я понялчто ты пытался сделать.Ваша собственность не имеет идентификатора, пока она не будет введена в БД.Вы можете увидеть это, если пройдете через отладчик.Чтобы исправить это, сначала передайте свойство, прежде чем применять его к своей мета.

        MyEntities db = new MyEntities();

        Property _property = property.Properties;
        db.AddToProperties(_property);
        db.SaveChanges();

На этом этапе, если вы посмотрите в отладчик, значение _properties ID теперь будет установлено на значение, назначенное базой данных.Теперь, когда вы привязываете свою мету к свойству, это будет фактический элемент свойства с ключом, поэтому он будет знать, как связать его в БД.

        PropertyMeta _meta = property.Meta;
        _meta.Property = _property;            
        db.AddToPropertyMetas(_meta);
        db.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...