实体框架实体不在 DataSpace.OSpace (_workspace.GetItemCollection(DataSpace.OSpace)) 中,但在 DataSpace.CSpace 中

2024-01-05

我一直在闲逛XMLs 代表实体框架。我尝试创建一种可以在运行时注入属性的实体, 首先我创建了DynamicEntity动态的物体

public class DynamicEntity : DynamicObject
{
    Dictionary<string, object> dynamicMembers = new Dictionary<string, object>();

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        dynamicMembers[binder.Name] = value;
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (dynamicMembers.TryGetValue(binder.Name, out result))
        {
            return dynamicMembers.TryGetValue(binder.Name, out result);
        }

        result = "";
        return true;
    }
}

然后实体继承于此

public partial class QUOTE_HOUSE : DynamicEntity

(当我从数据库获取数据后手动设置属性时,它似乎确实有效)。

所以基于这种移除属性的机制 https://stackoverflow.com/questions/37965267/multiple-databases-with-slightly-changing-models-how-do-i-allow-entity-framewor我尝试做另一件事,将属性插入到 XML 中,整个事情似乎都正常(至少它不会在映射时崩溃,而当 XML 不正确时通常会发生这种情况)var mappingCollection = new StorageMappingItemCollection(conceptualCollection, storageCollection, new[] {mappingXml.CreateReader()});).

问题是执行查询时 EF 崩溃了

实体类型 QUOTE_HOUSE 不是当前上下文模型的一部分。

描述:执行期间发生未处理的异常。 当前的网络请求。请查看堆栈跟踪以了解更多信息 有关错误及其在代码中的来源的信息。

异常详细信息:System.InvalidOperationException:实体类型 QUOTE_HOUSE 不是当前上下文模型的一部分。

[InvalidOperationException:实体类型 QUOTE_HOUSE 不属于 当前上下文的模型。]
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(类型 实体类型)+208
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型 实体类型)+50

我追踪到的TryUpdateEntitySetMappingsForType in System.Data.Entity.Internal.InternalContext加载 pdb 后EF

基本上我发生了什么QUOTE_HOUSE不在this._workspace.GetItemCollection(DataSpace.OSpace) where UpdateEntitySetMappings尝试从映射它。

它检查它是否在this._entitySetMappingsCache.ContainsKey(entityType))因为它不是,所以它会尝试迭代更新映射this._workspace.GetItemCollection(DataSpace.OSpace)我的物品不存在的地方

但是我可以看到我的实体确实存在于this._workspace.GetItems<EntityContainer>(DataSpace.CSpace).

Full UpdateEntitySetMappings看起来如下:

private void UpdateEntitySetMappings()
{
  ObjectItemCollection objectItemCollection = (ObjectItemCollection) this._workspace.GetItemCollection(DataSpace.OSpace);
  ReadOnlyCollection<EntityType> items = this._workspace.GetItems<EntityType>(DataSpace.OSpace);
  Stack<EntityType> entityTypeStack = new Stack<EntityType>();
  foreach (EntityType entityType1 in items)
  {
    entityTypeStack.Clear();
    EntityType cspaceType = (EntityType) this._workspace.GetEdmSpaceType((StructuralType) entityType1);
    do
    {
      entityTypeStack.Push(cspaceType);
      cspaceType = (EntityType) cspaceType.BaseType;
    }
    while (cspaceType != null);
    EntitySet entitySet = (EntitySet) null;
    while (entitySet == null && entityTypeStack.Count > 0)
    {
      cspaceType = entityTypeStack.Pop();
      foreach (EntityContainer entityContainer in this._workspace.GetItems<EntityContainer>(DataSpace.CSpace))
      {
        List<EntitySetBase> list = entityContainer.BaseEntitySets.Where<EntitySetBase>((Func<EntitySetBase, bool>) (s => s.ElementType == cspaceType)).ToList<EntitySetBase>();
        int count = list.Count;
        if (count > 1 || count == 1 && entitySet != null)
          throw Error.DbContext_MESTNotSupported();
        if (count == 1)
          entitySet = (EntitySet) list[0];
      }
    }
    if (entitySet != null)
    {
      EntityType entityType2 = (EntityType) this._workspace.GetObjectSpaceType((StructuralType) cspaceType);
      Type clrType1 = objectItemCollection.GetClrType((StructuralType) entityType1);
      Type clrType2 = objectItemCollection.GetClrType((StructuralType) entityType2);
      this._entitySetMappingsCache[clrType1] = new EntitySetTypePair(entitySet, clrType2);
    }
  }
}

实体如何进入 this._workspace.GetItemCollection(DataSpace.OSpace)? 为什么实体会在CSpace但不在OSpace ?

EDIT:对于那些可能想破解赏金的人,以下是您可能需要设置环境来重现问题的组件。

public class SystemToDatabaseMapping
{
    public SystemToDatabaseMapping(string system, string databaseType, string database, string connectionString, Type enitityType)
    {
        System = system;
        Database = database;
        DatabaseType = databaseType;
        ConnectionString = connectionString;
        EntityType = enitityType;
    }

    public Type EntityType { get; set; }
    public string System { get; set; }
    public string Database { get; set; }
    public string DatabaseType { get; set; }
    public string ConnectionString { get; set; }
    public List<ColumnToModify> ColumnsToModify  { get; set; }
}

public abstract class ColumnToModify
{
    protected ColumnToModify(string table, string column)
    {
        Table = table;
        Column = column;
    }

    public string Table { get; set; }
    public string Column { get; set; }

    public abstract bool IsRemove{ get; }
}

public class ColumnToRemove : ColumnToModify
{
    public ColumnToRemove(string table, string column) : base(table, column)
    {
    }

    public override bool IsRemove
    {
        get { return true; }
    }
}

public class ColumnToAdd : ColumnToModify
{
    public ColumnToAdd(string table, string column, Type type) : base(table, column)
    {
        this.Type = type;
    }

    public override bool IsRemove
    {
        get { return false; }
    }

    public Type Type { get; set; }
}

首先从数据库生成实体,(DynamicEntity代码在上面)

public partial class QUOTE_HOUSE : DynamicEntity
{
    public long UNIQUE_ID { get; set; }
}

数据库的 DbContext 需要构造函数重载

 public partial class EcomEntities : DbContext
 {

    public EcomEntities(DbConnection connectionString)
        : base(connectionString, false)
    {
    }

    public virtual DbSet<QUOTE_HOUSE > QUOTE_HOUSE { get; set; }
....
}

进行列注入的机制(这是一个粗糙的原型,所以请原谅它看起来有多糟糕),当注入尝试字符串列时,我知道它映射正常。

public static class EntityConnectionExtensions
{
    public static IEnumerable<XElement> ElementsAnyNS<T>(this IEnumerable<T> source, string localName)
        where T : XContainer
    {
        return source.Elements().Where(e => e.Name.LocalName == localName);
    }

    public static IEnumerable<XElement> ElementsAnyNS(this XContainer source, string localName)
    {
        return source.Elements().Where(e => e.Name.LocalName == localName);
    }

    private static void ModifyNodes(XElement element, List<ColumnToModify> tableAndColumn)
    {
        if (element.Attribute("Name") != null && tableAndColumn.Any(oo => oo.Table == element.Attribute("Name").Value) ||
            element.Attribute("StoreEntitySet") != null && tableAndColumn.Any(oo => oo.Table == element.Attribute("StoreEntitySet").Value))
        {
            var matchingRemoveSelectParts = tableAndColumn.Where(oo => oo.IsRemove && element.Value.Contains(string.Format("\"{0}\".\"{1}\" AS \"{1}\"", oo.Table, oo.Column))).ToList();

            if (matchingRemoveSelectParts.Any())
            {
                foreach (var matchingRemoveSelectPart in matchingRemoveSelectParts)
                {
                    var definingQuery = element.ElementsAnyNS("DefiningQuery").Single();
                    definingQuery.Value = definingQuery.Value.Replace(string.Format(", \n\"{0}\".\"{1}\" AS \"{1}\"", matchingRemoveSelectPart.Table, matchingRemoveSelectPart.Column), "");
                }
            }
            else
            {
                var nodesToRemove = element.Nodes()
                    .Where(o =>
                        o is XElement
                        && ((XElement) o).Attribute("Name") != null
                        && tableAndColumn.Any(oo => oo.IsRemove && ((XElement) o).Attribute("Name").Value == oo.Column));

                foreach (var node in nodesToRemove.ToList())
                {
                    node.Remove();
                }

                if (element.Attribute("Name") != null && tableAndColumn.Any(oo => oo.Table == element.Attribute("Name").Value))
                {
                    var elementsToAdd = tableAndColumn.Where(o => !o.IsRemove && o.Table == element.Attribute("Name").Value);
                    if (new[] {"Type=\"number\"", "Type=\"varchar2\"", "Type=\"date\""}.Any(o => element.ToString().Contains(o)))
                    {
                        foreach (var columnToModify in elementsToAdd)
                        {
                            var columnToAdd = (ColumnToAdd) columnToModify;

                            var type = new[] {typeof (decimal), typeof (float), typeof (int), typeof (bool)}.Contains(columnToAdd.Type)
                                ? "number"
                                : columnToAdd.Type == typeof (DateTime) ? "date" : "varchar2";

                            var precision = "";
                            var scale = "";
                            var maxLength = "";
                            if (type == "number")
                            {
                                precision = "38";
                                scale = new[] {typeof (decimal), typeof (float)}.Contains(columnToAdd.Type) ? "2" : "0";
                            }

                            if (type == "varchar2")
                            {
                                maxLength = "500";
                            }

                            var newProperty = new XElement(element.GetDefaultNamespace() + "Property", new XAttribute("Name", columnToAdd.Column), new XAttribute("Type", type));
                            if (!string.IsNullOrWhiteSpace(precision))
                            {
                                newProperty.Add(new XAttribute("Precision", precision));
                            }

                            if (!string.IsNullOrWhiteSpace(scale))
                            {
                                newProperty.Add(new XAttribute("Scale", scale));
                            }

                            if (!string.IsNullOrWhiteSpace(maxLength))
                            {
                                newProperty.Add(new XAttribute("MaxLength", maxLength));
                            }

                            element.Add(newProperty);
                        }
                    }
                    else if (
                        new[] {"Type=\"Decimal\"", "Type=\"String\"", "Type=\"DateTime\"", "Type=\"Boolean\"", "Type=\"Byte\"", "Type=\"Int16\"", "Type=\"Int32\"", "Type=\"Int64\""}.Any(
                            o => element.ToString().Contains(o)))
                    {
                        foreach (var columnToModify in elementsToAdd)
                        {
                            var columnToAdd = (ColumnToAdd) columnToModify;

                            var type = new[] {typeof (decimal), typeof (float), typeof (int), typeof (bool)}.Contains(columnToAdd.Type)
                                ? "Decimal"
                                : columnToAdd.Type == typeof (DateTime) ? "DateTime" : "String";

                            var precision = "";
                            var scale = "";
                            var maxLength = "";
                            if (type == "Decimal")
                            {
                                precision = "38";
                                scale = new[] {typeof (decimal), typeof (float)}.Contains(columnToAdd.Type) ? "2" : "0";
                            }

                            if (type == "String")
                            {
                                maxLength = "500";
                            }

                            var newProperty = new XElement(element.GetDefaultNamespace() + "Property", new XAttribute("Name", columnToAdd.Column), new XAttribute("Type", type));
                            if (!string.IsNullOrWhiteSpace(precision))
                            {
                                newProperty.Add(new XAttribute("Precision", precision));
                            }

                            if (!string.IsNullOrWhiteSpace(scale))
                            {
                                newProperty.Add(new XAttribute("Scale", scale));
                            }

                            if (!string.IsNullOrWhiteSpace(maxLength))
                            {
                                newProperty.Add(new XAttribute("MaxLength", maxLength));
                                newProperty.Add(new XAttribute("FixedLength", "false"));
                                newProperty.Add(new XAttribute("Unicode", "false"));
                            }

                            element.Add(newProperty);
                        }
                    }
                }
            }

            if (element.Attribute("Name") != null && tableAndColumn.Any(oo => oo.Table == element.Attribute("Name").Value) && element.GetNamespaceOfPrefix("store") != null &&
                element.Attribute(element.GetNamespaceOfPrefix("store") + "Type") != null &&
                element.Attribute(element.GetNamespaceOfPrefix("store") + "Type").Value == "Tables")
            {
                var matchingAddSelectParts = tableAndColumn.Where(o => !o.IsRemove && o.Table == element.Attribute("Name").Value);
                foreach (var matchingAddSelectPart in matchingAddSelectParts)
                {
                    var definingQuery = element.ElementsAnyNS("DefiningQuery").Single();
                    var schemaRegex = new Regex(string.Format("\\nFROM \\\"([a-zA-Z0-9]*)\\\".\\\"{0}\\\"", matchingAddSelectPart.Table));
                    var schema = schemaRegex.Matches(definingQuery.Value)[0].Groups[1].Value;
                    definingQuery.Value = definingQuery.Value.Replace(
                        string.Format("\nFROM \"{0}\".\"{1}\" \"{1}\"", schema, matchingAddSelectPart.Table),
                        string.Format(", \n\"{0}\".\"{1}\" AS \"{1}\"\nFROM \"{2}\".\"{0}\" \"{0}\"", matchingAddSelectPart.Table, matchingAddSelectPart.Column, schema));
                }
            }

            if (element.Attribute("StoreEntitySet") != null && tableAndColumn.Any(oo => !oo.IsRemove && oo.Table == element.Attribute("StoreEntitySet").Value))
            {
                var matchingAddSelectParts = tableAndColumn.Where(o => !o.IsRemove && o.Table == element.Attribute("StoreEntitySet").Value);
                foreach (var matchingAddSelectPart in matchingAddSelectParts)
                {
                    element.Add(new XElement(element.GetDefaultNamespace() + "ScalarProperty", new XAttribute("Name", matchingAddSelectPart.Column),
                        new XAttribute("ColumnName", matchingAddSelectPart.Column)));
                }
            }
        }
    }

    public static EntityConnection Create(List<ColumnToModify> tablesAndColumns, string connString)
    {
        var modelNameRegex = new Regex(@".*metadata=res:\/\/\*\/([a-zA-Z.]*).csdl|.*");
        var model = modelNameRegex.Matches(connString).Cast<Match>().SelectMany(o => o.Groups.Cast<Group>().Skip(1).Where(oo => oo.Value != "")).Select(o => o.Value).First();

        var conceptualReader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream(model + ".csdl"));
        var mappingReader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream(model + ".msl"));
        var storageReader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream(model + ".ssdl"));

        var conceptualXml = XElement.Load(conceptualReader);
        var mappingXml = XElement.Load(mappingReader);
        var storageXml = XElement.Load(storageReader);

        foreach (var entitySet in new[] {storageXml, conceptualXml}.SelectMany(xml => xml.Elements()))
        {
            if (entitySet.Attribute("Name").Value == "ModelStoreContainer")
            {
                foreach (var entityContainerEntitySet in entitySet.Elements())
                {
                    ModifyNodes(entityContainerEntitySet, tablesAndColumns);
                }
            }

            ModifyNodes(entitySet, tablesAndColumns);
        }

        foreach (var entitySet in mappingXml.Elements().ElementAt(0).Elements())
        {
            if (entitySet.Name.LocalName == "EntitySetMapping")
            {
                foreach (var entityContainerEntitySet in entitySet.Elements().First().Elements())
                {
                    ModifyNodes(entityContainerEntitySet, tablesAndColumns);
                }
            }

            ModifyNodes(entitySet, tablesAndColumns);
        }

        var storageCollection = new StoreItemCollection(new [] {storageXml.CreateReader()});
        var conceptualCollection = new EdmItemCollection(new[] { conceptualXml.CreateReader() });
        var mappingCollection = new StorageMappingItemCollection(conceptualCollection, storageCollection, new[] {mappingXml.CreateReader()});

        var workspace = new MetadataWorkspace();

        workspace.RegisterItemCollection(conceptualCollection);
        workspace.RegisterItemCollection(storageCollection);
        workspace.RegisterItemCollection(mappingCollection);
        var connectionData = new EntityConnectionStringBuilder(connString);
        var connection = DbProviderFactories
            .GetFactory(connectionData.Provider)
            .CreateConnection();
        connection.ConnectionString = connectionData.ProviderConnectionString;

        return new EntityConnection(workspace, connection);
    }
}

初始化:

public ActionResult QUOTE_HOUSE()
    {
        var onlineDocs = Enumerable.Empty<QUOTE_HOUSE>();
        var mappings = new List<SagaSystemToDatabaseMapping>{new SagaSystemToDatabaseMapping("x", "Oracle", "Db1",
                   "metadata=res://*/Ecom.Ecom.csdl|res://*/Ecom.Ecom.ssdl|res://*/Ecom.Ecom.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string='...'", typeof(EcomEntities))
                {
                    ColumnsToModify = new List<ColumnToModify> { new ColumnToAdd("QUOTE_HOUSE","TESTCOL", typeof(string))    }
                }};
        var entityConnection = EntityConnectionExtensions.Create(mappings[0].ColumnsToModify,mappings[0].ConnectionString);
        using (var db = new EcomEntities(entityConnection))
        {
            onlineDocs = db.QUOTE_HOUSE.Take(10);
        }

        return View("QUOTE_HOUSE", onlineDocs.ToList());
    }

您应该能够从实体生成 oracle 数据库QUOTE_HOUSE并输入一些虚拟值,不要认为您需要视图,因为它会爆炸.ToList()。生成数据库后,向数据库添加附加列,但不添加模型(alter table QUOTE_HOUSE add TESTCOL Varchar2(20)) - 在数据库中包含在模型运行时注入的列。您可能还需要调试EF 程序集的操作方法如下 https://stackoverflow.com/questions/32104912/how-can-i-get-a-pdb-file-for-the-entityframework-nuget-package。如果您需要更多信息或者我遗漏了某些内容,请告诉我。


我知道这可能不是您所期望的,但我想至少它会帮助您不在这个方向上浪费更多时间。

好消息是,问题不是由您的“hackish”代码引起的。事实上,我能够在不使用该代码的情况下重现该问题。刚刚创建了一个QUOTE_HOUSE表包含一个TestCol,将其导入到新的 edmx 上下文中,然后删除生成的TestCol来自实体类的属性。然后我让这个类继承了DynamicEntity,使用默认构造函数创建了一个上下文,称为context.QUOTE_HOUSE.ToList()它也因完全相同的异常而爆炸。

坏消息是你想要实现的目标是不可能的。 EF 使用反射来映射“对象空间”成员。它不提供任何类型扩展机制,例如TypeDescriptor例如,或动态运行时(它甚至不允许您投影到动态对象)。后者是可以理解的,因为每个动态对象都可能有不同的属性,并且不存在“动态”这样的东西type。请注意,在运行时“删除”列的技巧是有效的,因为它的作用与使用基本相同NotMapped首先在代码中,即该属性确实存在,但被 EF 忽略。

如果您对该实体为何感兴趣CSpace但不在OSpace,答案包含在一个名为的内部类中OSpaceTypeFactory(里面System.Data.Entity.Core.Metadata.Edm命名空间)-source https://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework/Core/Metadata/ObjectLayer/OSpaceTypeFactory.cs。有一种方法叫做TryCreateStructuralType,这称为TryCreateMembers如果它返回false,未添加类型。TryCreateMembers依次调用TryFindAndCreatePrimitiveProperties,通过PropertyInfo使用反射提取列表,然后返回false如果无法映射any CSpace的成员OSpaceobject 属性,从而有效防止类型被添加到OSpace类型集合。

希望至少能满足您的好奇心:) 但不幸的是,在运行时向 EF 实体“添加”属性又是一个死主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架实体不在 DataSpace.OSpace (_workspace.GetItemCollection(DataSpace.OSpace)) 中,但在 DataSpace.CSpace 中 的相关文章

  • 使用 C#.net 中的私有存储库的身份验证读取 BitBucket API

    我已经尝试了几天让 BitBucket API 为我工作 但是当涉及到让它为具有身份验证的私有存储库工作时 将问题设置为私有 当它们设置为公开 无需身份验证 一切正常 代码示例如下 static void Main string args
  • 快速 log2(float x) 实现 C++

    我需要在 C 中非常快速地实现 log2 float x 函数 我发现了一个非常有趣的实现 而且速度非常快 include
  • 如何在 Asp.Net Core 6 中向类型化 HttpClient 添加承载令牌身份验证

    我正在尝试使用 ASP Net Core 6 设置一个 Web api 以便用户可以到达我的端点 然后我使用特权帐户在幕后的 D365 中执行一些工作 我正在使用类型化的 HTTP 客户端 但我不确定如何插入承载身份验证 以便来自该客户端的
  • ASP.NET 如何在 Web API 中读取多部分表单数据?

    我将多部分表单数据发送到我的 Web API 如下所示 string example my string HttpContent stringContent new StringContent example HttpContent fil
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • C# 中输入按键

    我尝试了这段代码 private void textBox1 KeyPress object sender KeyPressEventArgs e if Convert ToInt32 e KeyChar 13 MessageBox Sho
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • C++ 中可以使用匿名类作为返回类型吗?

    有没有办法在 C 中使用匿名类作为返回类型 我用谷歌搜索这可能有效 struct Test fun 但是这段代码无法编译 错误信息是 新类型不能在返回类型中定义 其实代码没有任何意义 我只是想弄清楚匿名类是否可以用作C 中的返回类型 这是我
  • C 中的双重否定:是否保证返回 0/1?

    Is x 标准保证返回0 1 请注意 我是not询问 C 其中定义了 bool 类型 是的 在 C99 中 请参阅 6 5 3 3 4 逻辑非运算符的结果 是0如果其操作数的值比较 不等于0 1如果其操作数的值比较等于 0 结果具有类型in
  • 使用正则表达式解析日志文件

    我目前正在为我们的内部日志文件 由 log4php log4net 和 log4j 生成 开发一个解析器 到目前为止 我有一个很好的正则表达式来解析日志 除了一个烦人的一点 一些日志消息跨越多行 我无法正确匹配 我现在的正则表达式是这样的
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • 是否可以在对Where 的调用中调用命名方法?

    我试图从 RedGate 的这本免费电子书中了解 Linq 的一些性能影响ftp support red gate com ebooks under the hood of net memory management part1 pdf f
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • 多个包含带有变量定义的头文件

    我只是构建一个简单的 C 项目 代码如下所示 head h ifndef HEAD H define HEAD H int my var 100 endif src1 cpp include head h src2 cpp include
  • C# 中的类和模块有什么用

    有人可以解释一下类和模块之间的区别吗 你什么时候使用其中一种而不是另一种 我正在使用 C 更新 我的意思是相当于 VB 模块的 C 版本 这在很大程度上取决于您所指的 模块 Visual Basic 的模块 C 中没有真正等效的 VB Ne
  • 从 cin 读取整数序列并将它们存储在向量中

    这就是我读取整数的方法std cin并将它们存储在向量中 int number vector
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本
  • 如何编写完全可移植的 4 字节字符常量的编译时初始化

    遗留 代码大致如下所示 define MAKEID a b c d UInt32 a lt lt 24 UInt32 b lt lt 16 UInt32 c lt lt 8 UInt32 d define ID FORM MAKEID F

随机推荐

  • 默认插入向量不是默认初始化吗?

    中的一个std vector构造函数规定为 强调我的 explicit vector size type n const Allocator Allocator Effects 构造一个vector with n 默认插入使用指定分配器的元
  • 如何在组框中获取选中的单选按钮? [复制]

    这个问题在这里已经有答案了 我的组框中有很多单选按钮 通常我会使用单独检查每个单选按钮If radiobutton1 Checked True Then 但我认为也许有一种聪明的方法来检查组框中正在检查哪个单选按钮 任何想法 try thi
  • 从 sqlite 数据库中获取最后一行

    我正在尝试从 SQLite 数据库中获取最后一行 到目前为止 我已经尝试过 max sql sequence 但似乎没有任何效果 我必须获取行值并将其分配给类变量 由于我是 SQLite 和 Android 的新手 因此非常感谢任何帮助 谢
  • 使用自定义引导加载程序创建可引导 ISO 映像

    我正在尝试将我用汇编语言编写的引导加载程序转换为ISO图像文件 以下是代码来自MikeOS http mikeos sourceforge net write your own os html引导加载程序 这是我的引导加载程序代码 BITS
  • 在 C# 中创建不同的画笔图案

    我正在尝试做一些类似于绘画的东西 我想弄清楚如何制作不同的画笔样式 就像在 Paint 3D 中一样 使用钢笔工具与使用画笔工具时 您会得到一定的线条填充 我不知道从哪里开始 我一天中的大部分时间都在浏览文档并观看 YouTube 视频 我
  • DataTable服务器端处理添加编辑列

    我正在使用数据表 1 10 13 服务器端处理 我想添加一个带有编辑用户链接的 编辑 列 这个怎么做 我的js文件 userTable DataTable processing true serverSide true ajax type
  • 如何将Imageview放在其他布局后面

    我使用图像视图进行动画 这样它看起来就像从左到右的移动 但我的图像显示在其他视图的前面 以便用户能够单击图像 我正在尝试显示它behind另一种观点
  • 从 ROC 曲线获取阈值

    我有一些模型 使用ROCR将预测类百分比向量封装起来 我有一个性能对象 使用规格 tpr fpr 绘制性能对象可以得到一条 ROC 曲线 我正在比较特定误报率阈值 x 的模型 我希望从性能对象中获取真阳性率 y 的值 更重要的是 我想获得用
  • 在 ssh 模式下运行时在 vscode 中打开本地终端

    当我通过 ssh 连接到 vscode 中的远程计算机时 集成终端会在远程计算机中打开一个终端 有没有办法用本地计算机的终端打开终端面板 Using the command palette default ctrl shift p cmd
  • ASP.NET 成员资格保持身份验证问题

    因此 我的应用程序很奇怪 因为当您登录时 您将保持登录状态一两页 然后就迷路了 我的设置是这样的
  • C99 支持真的还没有广泛普及吗?

    我正在阅读 GNOME 项目的一些最佳实践 他们一直强调的一件事是避免 C99 功能 因为支持仍然不广泛 他们提到的一些功能包括单行注释和在块中间声明变量等功能 这让我想知道 C99 是否支持 即使是像这样的基本功能 评论 真的还没有广泛传
  • 如何在 JAVA 中使用 PDFBox 从 PDF 创建图像

    我想从 PDF 的第一页创建图像 我正在使用 PDFBox 在网上研究后 我发现了以下代码片段 public class ExtractImages public static void main String args ExtractIm
  • libpthread.so.0:添加符号时出错:命令行中缺少 DSO

    当我编译 openvswitch 1 5 0 时 遇到以下编译错误 gcc Wstrict prototypes Wall Wno sign compare Wpointer arith Wdeclaration after stateme
  • 从监听器访问对象

    假设我们有一些Foo包含的类 public void setOnSomethingListener OnSomethingListener listener 我们将其注册为 Foo foo new Foo foo setOnSomethin
  • 如何公开嵌入式 Flash 对象的 JavaScript 接口?

    JavaScript 和Flash Player 可以通过Flash 的ExternalInterface 机制交换数据 您注册希望能够从JavaScript 调用的ActionScript 函数 我的问题 如何找出 Flash 对象的哪些
  • Python:为什么我收到 AttributeError:__enter__

    我没有重新分配 open 关键字 但仍然收到此错误 有任何建议或方向来修复我的错误吗 with tempfile mkdtemp as test dir print test dir AttributeError enter 我也是Pyth
  • 只有变量可以通过引用传递 - php

    我正在尝试此代码 但出现此错误 Only variables can be passed by reference in xxx script class page function insert db of form arr i 0 fo
  • 如何用 Jest 模拟 Axios?

    我有一个函数client index js这是使用 axios 发出请求 import axios from axios const createRequest async url method gt const response awai
  • 从多线程获取单例实例的安全方法

    Method 1 DataCenter DataCenter getInstance static DataCenter instance return instance Method 2 DataCenter DataCenter get
  • 实体框架实体不在 DataSpace.OSpace (_workspace.GetItemCollection(DataSpace.OSpace)) 中,但在 DataSpace.CSpace 中

    我一直在闲逛XMLs 代表实体框架 我尝试创建一种可以在运行时注入属性的实体 首先我创建了DynamicEntity动态的物体 public class DynamicEntity DynamicObject Dictionary