2

у меня есть эти сущности (это всего лишь абстракция, я создал для этой должности):Entity Framework: Назначают объект в собственность другого лица

  • Язык
  • Район
  • Описание

Это ссылки между ними:

  • район * - 1 Язык
  • Описание * - 1 Язык
  • район 1 - 1 Описание

Если я принести, как это :

var myFetch = from c in context.Districts 
       where c.Id = 10 
       select new { DistrictId = c.Id, Lang = c.Language }; 

и после этого, я стараюсь, чтобы присвоить его Описание как это:

Description desc = Description.CreateDescription(0, "My description"); 
desc.DistrictReference.EntityKey = new EntityKey("MyEntities.Descriptions", "DistrictId", myFetch.DistrictId); 
desc.Language = myFetch.Lang; //throws error 

Ошибка выброшен является:

System.InvalidOperationException: отношения не могут быть определяется как Имя EntitySet 'MyEntities.Descriptions' is not vali d для роли «Район» в ассоциации имя ассоциации 'MyEntities.District_Description'.

Что я делаю неправильно?

ответ

1

если myFetch должны были быть экземпляром класса District вы могли бы делать это программно:

desc.DistrictReference.EntityKey = new EntityKey( 
    String.Format( 
    "{0}.{1}", 
    myFetch.EntityKey.EntityContainerName, 
    myFetch.EntityKey.EntitySetName), 
    "DistrictId", 
    myFetch.DistrictId); 
+0

Мне это нравится - это избавляет от проблем с орфографией – veljkoz

2

Только то, что говорится в сообщении: вы указали неправильное имя объекта.

  1. Открыть EDMX.
  2. Откройте окно браузера модели.
  3. Найти объект округа в браузере модели
  4. щелкаем правой кнопкой мыши, выберите «Свойства»
  5. Обратите внимание на правильное Entity Установить имя
+0

Нет, это не так. И в любом случае, район не используется внутри строки, поэтому я не мог ошибаться. – veljkoz

+0

Да, это так; вы его еще не нашли. * Все имена * EF в конце концов возвращаются к строкам (в EDMX). Как я уже сказал, посмотрите на картографию.Описания могут быть именем EntitySet, которое вы * предназначили *, но это не то, что в вашей модели. –

+1

Argh ... Я поставил EntityKey с другой стороны ... это должно было быть: desc.DistrictReference.EntityKey = new EntityKey («MyEntities.Districts», «Id», myFetch.DistrictId); Спасибо! – veljkoz