這個問題很直接。
我有一個型別,想在這個型別的基礎上創建一個新的型別,只是想改變名稱。
示例:
var oldType = someObject.GetType()。
var type = CreateNewType(oldType, "newType") 。
請讓我解釋一下我自己:
我正在動態地創建幾個資料庫(通過在 EF Core 上添加模型)。這很好,但只是在第一次嘗試中,而不是在第二次嘗試中,因為他把以前的表作為單子背景關系(就我所看到的,附在型別上)。謝謝你,
。
uj5u.com熱心網友回復:
在運行時建立一個新型別的唯一方法是使用一些重型反射來在運行時創建IL代碼:
話雖如此,除非您有非常具體的需求,否則這聞起來像是一個XY問題。我建議你創建一個新的問題,描述你在使用EF核心時遇到的具體問題(包括一個最小可復制的例子),并讓EF專家建議一個替代的解決方案。
uj5u.com熱心網友回復:
在這里只是為了回答問題本身,即使是最好的解決方案:
可以從這里改編。
可以從這里改編:
從TypeBuilder創建帶有基類和附加欄位的動態型別會產生一個例外
代碼:
public class ClassBuilder
{
readonly AssemblyName _assemblyName;
public ClassBuilder(string className)
{
_assemblyName = new AssemblyName(className)。
}
public Type CopyType(Type type, string name) var assemblyBuilder =
AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(name), AssemblyBuilderAccess.Run)。
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule"/span>)。
TypeBuilder typeBuilder = moduleBuilder.DefineType(_assemblyName.FullName
, TypeAttributes.Public |
TypeAttributes.Class |
TypeAttributes.AutoClass | TypeAttributes.AnsiClass
TypeAttributes.AnsiClass | TypeAttributes.BeforeFrame
TypeAttributes.BeforeFieldInit | TypeAttributes.BeforeFieldInit
TypeAttributes.AutoLayout
,型別)。)
typeBuilder.DefineDefaultConstructor(MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTS)
MethodAttributes.RTSpecialName)。)
return typeBuilder.CreateType()。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/323096.html
標籤:
上一篇:我運行的作業在第一個InputDialog后停止作業,我該如何解決?
下一篇:如何讓我的兩個類一起運行?
