Значения внешнего ключа без свойств навигации - PullRequest
0 голосов
/ 20 апреля 2011

Можно ли назначать значения внешнего ключа вручную при вставке записей?

Я не хочу использовать TransactionScope или аналогичную конструкцию.Но я хочу установить значение внешнего ключа перед вызовом SaveChanges ()

Например:

EntityX x = new EntityX();
x.Name = "test";
ctx.AddToEntityX(x);

EntityY y = new EntityY();
y.Name = "Test";
y.EntityXID = x.ID; // <--- I want this. Not using a navigation property, but its 0.
ctx.AddToEntityY(y);

ctx.SaveChanges();

Ответы [ 3 ]

0 голосов
/ 21 апреля 2011

Я не вижу проблем с использованием свойства навигации в вашем примере. Также нет необходимости в области транзакции, потому что SaveChanges использует транзакцию внутри.

Теоретически, если вы удалите все ассоциации в вашей концептуальной модели (дизайнер EDMX) и вручную удалите все ассоциации в SSDL-части файла EDMX, а затем отобразите FK на новые скалярные свойства, вы сможете это сделать. Но вы настолько сильно ухудшите EF, что вам даже не придется его использовать, и вы вернетесь обратно в ADO.NET или Linq-to-sql. Более того, как только вы дотронетесь до SSDL-части EDMX, вы больше не сможете использовать Обновление из базы данных .

0 голосов
/ 13 мая 2011

Если вы создадите новую сущность, у нее не будет идентификатора, пока она не будет сохранена.Тогда вам придется извлечь его из БД и получить идею.Использование свойств навигации, безусловно, ваш лучший выбор в этом примере.Так что вместо:

y.EntityXID = x.ID;

вы бы использовали

y.EntityX = x;
0 голосов
/ 20 апреля 2011

да, это возможно, но много трудностей, вы должны назначить его через EntityReference:

y.EntityXReference.EntityKey = new EntityKey("Enitites.YSet", "Id", x.id);

см. Конструктор EntityKey для деталей параметров

для других ссылок см. Совет 7 - Как подделать свойства внешнего ключа в .NET 3.5 SP1

...