2009-04-17 3 views
0

Я следующий домен модель:Как создать отображение отношения с помощью рамки Entity

User 
{ 
int Id; 
} 

City 
{ 
int Id; 
} 

UserCity 
{ 
int UserId, 
int CityId, 
dateTime StartDate 
} 

В функции, где я должен прикрепить пользователя в город, следующий код работает для меня:

UserCity uc = new UserCity(); 

//This is a db hit 
uc.User = MyEntityFrameworkDBContext.User.FirstOrDefault(u => u.ID == currentUserId); 

//this is a db hit 
uc.City = MyEntityFrameworkDBContext.City.FirstOrDefault(c => c.ID == currentCityId); 
uc.StartDate = userCityStartDate; 

//this is a db hit 
MyEntityFrameworkDBContext.SaveChanges(); 

Есть ли способ создать отношения только с одним ударом БД? На самом деле первые два db-хита не требуются.

ответ

0

Нет, поскольку EF v1.0 не поддерживает поля внешнего ключа. Они добавят это в версии 2.0 (.NET 4.0).

+0

Это неправильно. Да, ассоциации FK новы в .NET 4.0, но из этого не следует, что вы не можете делать то, что хочет Джеймс. –

0
uc.UserReference.EntityKey = 
    new EntityKey("MyEntities.Users", "Id", currentUserId); 

... и аналогичным образом для города. Очевидно, замените аргументы на конструктор EntityKey правильными значениями для вашей модели сущности. Обратите внимание, что после установки EntityKey вы не сможете ссылаться на свойства City или User. Но поскольку вы никогда не делаете этого в коде шоу, это не будет проблемой для вас.

Кроме того, в коде, который вы показываете, вы никогда не добавляете новую сущность в контекст. Я предполагаю, что это просто упущение в вопросе. Вы должны сделать это, прежде чем устанавливать пользователя и город.

+0

Я этого не знал. все же он выглядит очень хрупким и склонным к ошибкам. –

+0

Он поддерживается, он работает, и он по крайней мере в два раза быстрее, чем то, что он делает сейчас. Если вы используете строку, дайте вам советы, посмотрите http://blogs.msdn.com/alexj/archive/2009/04/15/tip-13-how-to-attach-anity-the-easy-way. ASPX –

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