1

在实体框架 5 中创建实体实例时遇到问题。我通过反射创建它:

var method = this.objectContextinstance().GetType().GetMethod("CreateObject");
method = method.MakeGenericMethod(Type.GetType("PERSON"));
var entity = method.Invoke(this.objectContextinstance(), null);

问题是非空属性被初始化为零,我不希望它这样做。原因是,如果我保存它,它会引用另一个键为零的对象,从而创建错误的数据。

有没有一种创建实例的方法,它不会自动设置非空属性,或者是否有配置将非空属性设置为“-1”之类的值?

我提到的问题发生在通过“新”子句创建某个实体的实例。

我正在使用数据库优先方法。

任何帮助,将不胜感激!提前致谢!

4

1 回答 1

0

为了解决这个问题,我在创建后将所有属性设置为默认值:

    public void InitializeCreatedEntity(object entity)
    {
        Type tipoObj = entity.GetType();

        string nomeEntidade = GetNomeEntidade(entity);

        foreach (EntityType entityType in EntityTypes)
        {
            if (entityType.Name.Equals(nomeEntidade))
            {
                foreach (EdmProperty property in entityType.Properties)
                {
                    if (!property.Nullable)
                    {
                        PropertyInfo info = tipoObj.GetProperty(property.Name);

                        switch (property.TypeUsage.EdmType.Name)
                        {
                            case "String": info.SetValue(entity, "", null);
                                break;
                            case "Int32": info.SetValue(entity, DefaultInt, null);
                                break;
                            case "Int64": info.SetValue(entity, DefaultInt, null);
                                break;
                            case "Int16": info.SetValue(entity, DefaultInt, null);
                                break;
                            case "Binary": Byte[] initByteArray = { };
                                info.SetValue(entity, initByteArray, null);
                                break;
                            case "DateTime": info.SetValue(entity, DateTime.Now, null);
                                break;
                        }
                    }
                }
            }
        }
    }
于 2016-04-06T16:18:49.507 回答