EntityDataModel устанавливает родительский ключ в null при вставке или обновлении - PullRequest
0 голосов
/ 03 августа 2011

Я работаю в asp.net 3.5 sp1. У меня есть две таблицы

User
  UserID PK (int)
  UserName (varchar)
  ContactInfoID FK (int) Allow Null

ContactInfo
  ConactInfoID PK (int)
  Address (varchar)
  City (varchar)
  State (varchar)
  Zip (varchar)

Я пытаюсь использовать EDM для вставки / обновления пользователя без соответствующего родительского ContactInfo. База данных позволяет это.

Я хочу иметь возможность установить ContactInfo_ContactInfoID = -1 для представления нулевого родителя. У меня есть следующая функция в частичном классе пользователя. Я включил ошибки, которые я получаю, когда я пытался установить различные аспекты EntityKey в ноль.

        public int ContactInfo_ContactInfoID
        {
            get
            {
                if (this.ContactInfoReference == null)
                    return -1;

                if (this.ContactInfoReference.EntityKey == null)
                    return -1;

                return (int)this.ContactInfoReference.EntityKey.EntityKeyValues [0].Value;
            }
            set
            {
                //To notify others listening that the property is changing
                this.OnPropertyChanging ("ContactInfoReference_ContactInfoD");

                if (value != -1)
                {
                    //Always needs to create a new EntityKey object
                    this.ContactInfoReference.EntityKey =
                        new EntityKey (
                            "ProjectRedEntities.ContactInfo",
                            new EntityKeyMember []
                                { new EntityKeyMember("ContactInfoID",
                                    (object)value) });
                }
                else
                {
//                    this.ContactInfoReference.EntityKey = null;
                    // ERROR: A relationship is being added or deleted from an AssociationSet 'FK_User_ContactInfo'. With cardinality constraints, a corresponding 'User' must also be added or deleted.

//                    this.ContactInfoReference.Value = null;
                    // ERROR : A relationship is being added or deleted from an AssociationSet 'FK_User_ContactInfo'. With cardinality constraints, a corresponding 'User' must also be added or deleted.
//                    this.ContactInfoReference.EntityKey =
//                        new EntityKey (
//                            "ProjectRedEntities.ContactInfo", "ContactInfoID", null);
                    // ERROR: Value cannot be null.

//                    this.ContactInfoReference.EntityKey = EntityKey.NoEntitySetKey;
                    // ERROR: The EntityKey property cannot be set to EntityNotValidKey, NoEntitySetKey, or a temporary key.

//                    this.ContactInfoReference.EntityKey =
//                        new EntityKey ();
                    // ERROR The EntityKey property cannot be set to EntityNotValidKey, NoEntitySetKey, or a temporary key.
                }
                //To notify others listenging that the property has changed
                this.OnPropertyChanged ("ContactInfoReference_ContactInfoID");
            }
        }

Если я пытаюсь установить для поля nullable в отношении true значение, то я получаю ошибку компиляции

'ContactInfoID' для типа ContactInfo недопустим. Все части ключа не должны обнуляться.

Я могу загрузить пользователя из базы данных с нулевым ContactInfoID, но каждый раз, когда я пытаюсь установить для EntityKey значение null, я получаю исключения.

Как установить для User.ContactInfoID значение null?

1 Ответ

0 голосов
/ 03 августа 2011

User.ContactID не может быть установлен в -1 для представления отсутствующего значения;вместо того, чтобы связываться с entitykey, вы не можете использовать null для этого?EF не был создан, чтобы использовать -1 в качестве этого обозначения ...

...