昨天我正在研究一个代码重构,遇到一个异常,我真的找不到太多的信息.情况就是这样.
我们有一对EF实体,通过关系表有多对多的关系.有问题的对象看起来像这样,省去了不必要的位.
public partial class MasterCode
{
public int MasterCodeId { get; set; }
...
public virtual ICollection<MasterCodeToSubCode> MasterCodeToSubCodes { get; set; }
}
public partial class MasterCodeToSubCodes
{
public int MasterCodeToSubCodeId { get; set; }
public int MasterCodeId { get; set; }
public int SubCodeId { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我尝试对这些实体运行LINQ查询.我们在DTO中使用了很多LINQ投影.DTO和查询如下.masterCodeId是传入的参数.
public class MasterCodeDto
{
public int MasterCodeId { get; set; }
...
public ICollection<int> SubCodeIds { get; set; }
}
(from m in MasterCodes
where m.MasterCodeId == …Run Code Online (Sandbox Code Playgroud) 随着.NET 4.7.2的更改,现在可以在Web窗体中进行构造函数注入.我已经使用简单注入器使用Web窗体,但是想要一些输入,如果有任何"陷阱"我可能会丢失.
首先,我有自己的网页是从拍摄的注册这里.
public static void RegisterWebPages(this Container container)
{
var pageTypes =
from assembly in BuildManager.GetReferencedAssemblies().Cast<Assembly>()
where !assembly.IsDynamic
where !assembly.GlobalAssemblyCache
from type in assembly.GetExportedTypes()
where type.IsSubclassOf(typeof(Page))
where !type.IsAbstract && !type.IsGenericType
select type;
foreach (Type type in pageTypes)
{
var reg = Lifestyle.Transient.CreateRegistration(type, container);
reg.SuppressDiagnosticWarning(
DiagnosticType.DisposableTransientComponent,
"ASP.NET creates and disposes page classes for us.");
container.AddRegistration(type, reg);
}
}
Run Code Online (Sandbox Code Playgroud)
当从上面的链接使用属性注入方法时,这很有效.我把它包括在这里是为了完整.
当我第一次连线时,有OutputCacheModule一个内部构造函数的问题.使用此处的代码,我能够解决该问题以及可能源自内部构造函数的任何其他问题.以下是该实现的完整性代码.
public class InternalConstructorResolutionBehavior : IConstructorResolutionBehavior
{
private IConstructorResolutionBehavior original;
public InternalConstructorResolutionBehavior(Container container)
{
this.original …Run Code Online (Sandbox Code Playgroud) 我们有一种情况是我们使用JSON来序列化EF模型以用于数据同步.为了使同步正常工作,我们需要模型的表名.这并不难,我们的代码已经提供给我们了.主要问题是在JSON中传输该数据.
例如,假设我们有以下模型.
public class Foo
{
// ...
public virtual ICollection<Bar> Bars { get; set; }
}
public class Bar
{
// ...
public virtual ICollection<FooBar> FooBars { get; set; }
}
public class FooBar
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我们通过includes下拉所有嵌套项,然后序列化它.问题是,我们需要将实体的表名作为元数据插入到JSON中,而不将其添加到模型本身.
例如,在上面的场景中,JSON看起来像
{
"__tableName": "Foos",
// ...
"Bars": [
{
"__tableName": "Bars"
// ...
"FooBars": [
{
"__tableName": "FooBars"
// ...
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我认为JSON.Net中的自定义序列化程序是最好的方法,但要么我没有插入正确的位置,要么它们不像我想的那样工作.
我尝试制作自定义,JsonConverter因为这似乎是处理自定义序列化方案的默认方式.但是,它似乎只是在要对序列化的基础对象上调用,而不是任何子对象.
我是否需要插入JSON.Net以实际放入此元数据?我在这个主题上找到的几乎所有内容都指向JsonConverter,但我不确定在这种情况下实际上我需要做什么.
我有一个想法是将对象加载到一个JObject中JsonConverter,然后自己走模型树并根据需要插入键,但我希望能比这更优雅的东西.
谢谢.
在 .NET 4.7.2 中,微软引入了在 WebForms 中使用构造函数注入的能力,通过使用这里HttpRuntime.WebObjectActivator看到的
给出的示例是在 C# 中。我正在开发一个正在现代化的旧版 VB.NET 应用程序。我们想在我们计划使用的属性注入上使用构造函数注入,因为它更规范。
但是,当我尝试为 WebForm 提供参数化构造函数时,出现以下错误。
(BC30387) 类“testpage_aspx”必须声明一个“Sub New”,因为它的基类“TestPage”没有可以不带参数调用的可访问“Sub New”。
这似乎是由于 VB.NET 处理构造函数和继承的方式。通过 VB.NET 处理构造函数的方式,甚至可能在 VB.NET WebForms 项目中使用参数化构造函数?