小编Jan*_*Jan的帖子

将自定义连接字符串注入Entity Framework的DbContext

我想在我的EF上下文中注入一个自定义连接字符串,而不是在我的web.config中使用连接字符串.我们的想法是将所有与数据库相关的逻辑从我的MVC项目移到一个单独的层.我还希望这个层负责正确的连接字符串而不是我的Web应用程序.

当前使用上下文的服务正在调用默认构造函数:

using (var context = new MyDbContext()) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

默认构造函数在内部DbContext使用以下连接字符串的名称进行调用web.config:

public partial class MyDbContext : DbContext
{
    public MyDbContext()
        : base("name=MyDbContext")
    {
    }

    //...
}
Run Code Online (Sandbox Code Playgroud)

为了注入我的自定义连接字符串,我需要一个重载的构造函数,它将连接字符串作为参数.不幸的是,没有提供这样的构造函数.

很明显,在MyDbContext类中手动添加构造函数重载将是一个非常糟糕的主意,因为这个类是自动生成的,并且很快就会被覆盖.我们不再谈论这个,这是禁止的.期.

由于MyDbContext是一个部分类,可以在一个单独的类文件中添加额外的构造函数partial class MyDbContext,但这看起来也很臭.我不知道为什么,但我的大脑说不好主意.

经过一些调查后我发现,通过编辑T Model.Context.tt#模板,可以告诉EF包含这个额外的构造函数,这是C#和一些模板标记的混合.这是原始构造函数:

public <#=Code.Escape(container)#>()
    : base("name=<#=container.Name#>")
{
<#
    WriteLazyLoadingEnabled(container);
#>
}
Run Code Online (Sandbox Code Playgroud)

显然很容易添加类似的逻辑来生成包含连接字符串的重载构造函数:

public <#=Code.Escape(container)#>(string nameOrConnectionString)
    : base(nameOrConnectionString)
{
<#
    WriteLazyLoadingEnabled(container);
#>
}
Run Code Online (Sandbox Code Playgroud)

我试过这个并注意到,重新生成模型类和从DB更新模型都不会影响T4模板,因此额外的构造函数将始终存在.好!乍一看,这看起来是一个合适的解决方案,但......

这是我的问题:这真的是一个很好的解决方案吗?

让我们再次比较三个选项:

  1. 编辑自动生成的类(好吧,我们同意忘了这个)
  2. 在部分类文件中添加构造函数
  3. 编辑T4模板以告知EF生成其他构造函数 …

connection-string entity-framework-4

12
推荐指数
1
解决办法
4122
查看次数

div中意外的填充/边距

我有一段div时间将图像设置为margins和paddings为0.我仍然在图像内部的图像下方留下一点间隙div.为什么div大于图像?

看到这个jsfiddle:http://jsfiddle.net/n6bz4tye/

在FF32和Chrome 37中效果相同.

我知道,我可以使用负边距/填充来解决这个问题,但我想知道,发生了什么以及它为什么会这样.

html css css3

4
推荐指数
1
解决办法
345
查看次数

带有MVC3的Spring.NET(Razor)

我正在尝试ASP.NET MVC3 Razor,我印象非常深刻.这就是我们要去的方式.

我们在框架中使用Spring.NET进行依赖注入,我想知道,如果可以将它用于MVC3项目吗?

Spring.NET的文档只讨论MVC2,但我想在将来的版本中会有MVC3支持.尽管如此,我还是想让它发挥作用.到目前为止没有成功.

所以我的问题是,如果其他人找到了使用Spring.NETMVC3中进行依赖注入的方法或解决方法或技巧,如果是这样,怎么样?

我知道这是一个非常普遍的问题,但即使是诚实的"对不起,这绝对不可能"或"它应该无需任何修改就能工作"对我有很大的帮助.

先谢谢,Jan

dependency-injection spring.net asp.net-mvc-3

3
推荐指数
1
解决办法
2713
查看次数

C#XmlSerializer使用xs:string以外的类型忽略xs:attribute

我的问题似乎很奇怪,我没有发现任何其他问题,所以我想这是一个非常简单和愚蠢的错误,我似乎无法找到.

我有一个XSD,我使用xsd.exe生成一个类结构.我用值"填充"我的对象,但在将其序列化为XML时,它会忽略所有不属于类型的类属性string.

var myGraph = new graph();
myGraph.myString = "hallo";
myGraph.myInt = 80;

var serializer = new XmlSerializer(typeof(graph));
TextWriter writeFileStream = new StreamWriter(Path.Combine(outFolder, outFile));
serializer.Serialize(writeFileStream, myGraph);
writeFileStream.Close();
Run Code Online (Sandbox Code Playgroud)

我期望:

<graph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
    myString="hallo" 
    myInt="80"
/>
Run Code Online (Sandbox Code Playgroud)

实际输出是:

<graph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    myString="hallo" 
/>
Run Code Online (Sandbox Code Playgroud)

该属性myInt已被忽略.如果我将其定义为字符串,它也会出现,但与其他任何类型一样,它都不会出现.如果我声明required并离开它null,它将被序列化为myInt="0".

我错过了什么?

一些细节:

XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="graph">
    <xs:complexType>
      <xs:attribute name="myString" type="xs:string" />
      <xs:attribute name="myInt" type="xs:int" />
    </xs:complexType>
  </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

生成的类:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=false)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public …
Run Code Online (Sandbox Code Playgroud)

c# attributes xmlserializer

1
推荐指数
1
解决办法
2192
查看次数