小编Pie*_* SS的帖子

HOWTO:带有EntityFramework和Code-First的SQLite

我正在尝试使用EF动态创建嵌入式SQLite数据库但是,我无法使其工作,数据库文件永远不会被创建.

我有EF 4.2和最新版本的SQLite

这就是我所拥有的

的app.config

<?xml version="1.0"?>
<configuration>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite"/>
      <add name="SQLite Data Provider"
           invariant="System.Data.SQLite"
           description=".Net Framework Data Provider for SQLite"
           type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="DataContext"
         connectionString="Data Source=test.db;Version=3;New=True;"
         providerName="System.Data.SQLite" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

数据库初始化程序(放入一些内容)

class PageDbInitializer : DropCreateDatabaseAlways<PageDB>
{
    protected override void Seed(PageDB context)
    {
        for (int i = 0; i < 10; i++)
        {
            WebPage page = new WebPage() { Name = "Page" + (i + 1) };
            context.Pages.Add(page);
        }
        base.Seed(context); …
Run Code Online (Sandbox Code Playgroud)

c# sqlite entity-framework system.data.sqlite ef-code-first

22
推荐指数
2
解决办法
2万
查看次数

如何使用Json.Net序列化/反序列化具有其他属性的自定义集合

我有一个自定义集合(实现IList),它有一些自定义属性,如下所示:

class FooCollection : IList<Foo> {

    private List<Foo> _foos = new List<Foo>();
    public string Bar { get; set; }        

    //Implement IList, ICollection and IEnumerable members...

}
Run Code Online (Sandbox Code Playgroud)

当我序列化时,我使用以下代码:

JsonSerializerSettings jss = new JsonSerializerSettings() {
    TypeNameHandling = TypeNameHandling.Auto
};
string serializedCollection = JsonConvert.SerializeObject( value , jss );
Run Code Online (Sandbox Code Playgroud)

它正确地序列化和反序列化所有收集项目; 但是,FooCollection不考虑课堂上的任何额外属性.

无论如何将它们包含在序列化中?

.net c# serialization json json.net

21
推荐指数
2
解决办法
1万
查看次数

如何定义命名参数C#

这似乎是一个简单的问题,但由于某种原因,我无法在任何地方找到答案.基本上,我希望能够实现一个带NamedParameters的构造函数.

通过命名参数,我不是指具有默认值(可选参数)的参数,例如:

public SomeMethod(){
    string newBar = Foo(bar2 : "customBar2");
}

public string Foo(string bar1 = "bar1", bar2 = "bar2" ){
     //...
}
Run Code Online (Sandbox Code Playgroud)

什么我想实现一个很好的例子是AuthorizeAttributeSystem.Web.Mvc装配.您可以使用以下方式:

[Authorize(Roles = "Administrators", Users = "ThatCoolGuy")]
public ActionResult Admin(){

}
Run Code Online (Sandbox Code Playgroud)

intellisense中构造函数的签名类似于以下示例,我相信(请确认)那些NamedParameters正在映射到类属性.

AuthorizeAttribute.AuthorizeAttribute(NamedParameters ...)Initiliaze System.Web.Mvc.AuthorizeAttribute类的新实例

命名参数:

  • 订单int
  • 用户字符串
  • 角色字符串

.net c# custom-attributes named-parameters

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

复杂模型/子模型验证(MVC)的最佳方法

问题

我知道在MVC中有很多方法可以进行模型验证,并且有很多关于这个主题的文档.不过,我不太清楚什么是用于验证的性能,最好的方法模型这是"子模型"同一类型.

请记住以下内容

  • 我仍然想利用这些TryUpdateModel/TryValidateModel方法
  • 这些"子模型"中的每一个都具有强类型视图
  • MainModel该类有一个强类型视图,用于呈现整个显示视图

这可能听起来有点令人困惑但我会抛出一些代码来澄清.以下面的类为例:

MainModel:

class MainModel{
    public SomeSubModel Prop1 { get; set; }
    public SomeSubModel Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

SomeSubModel:

class SomeSubModel{
      public string Name { get; set; }
      public string Foo { get; set; }
      public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

MainModelController:

class MainModelController{

    public ActionResult MainDisplay(){
         var main = db.retrieveMainModel();
         return View(main); 
    }

    [HttpGet]
    public ActionResult EditProp1(){
         //hypothetical retrieve …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller asp.net-mvc model-validation validationattribute

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

获取"成员"组的用户

我得到了一个可行的解决方案,但是我非常确定资源密集度较低的方法,因为当前的解决方案包括进行查询以获取组成员,然后查询以获取每个用户的信息.

这是我的代码:

DirectoryEntry root = new DirectoryEntry( "LDAP://server:port" );
DirectorySearcher searcher = new DirectorySearcher( root );
searcher.Filter = "(&(ObjectClass=Group)(CN=foo-group))";

var members = (IEnumerable)searcher.FindOne()
              .GetDirectoryEntry()
              .Invoke( "members" );

Dictionary<string , string> results = new Dictionary<string , string>();

foreach( object member in members ) {
   DirectoryEntry de = new DirectoryEntry( member );
   results.Add( de.Properties[ "SAMAccountname" ][ 0 ].ToString(), de.Properties[ "cn" ][ 0 ].ToString() );
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够执行单个查询以获取作为组成员的每个用户,过滤要加载的属性,然后显示它们.所以这样的事情

DirectoryEntry root = new DirectoryEntry( "LDAP://server:port" );
DirectorySearcher searcher = new DirectorySearcher( root );
searcher.PropertiesToLoad.Add( "cn" …
Run Code Online (Sandbox Code Playgroud)

.net c# active-directory

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

使用Distinct与自定义对象列表

如何使该Distinct()方法使用自定义对象列表(Href在本例中),这是当前对象的样子:

public class Href : IComparable, IComparer<Href>
{
    public Uri URL { get; set; }
    public UrlType URLType { get; set; }

    public Href(Uri url, UrlType urltype)
    {
        URL = url;
        URLType = urltype;
    }


    #region IComparable Members

    public int CompareTo(object obj)
    {
        if (obj is Href)
        {
            return URL.ToString().CompareTo((obj as Href).URL.ToString());
        }
        else
            throw new ArgumentException("Wrong data type.");
    }

    #endregion

    #region IComparer<Href> Members

    int IComparer<Href>.Compare(Href x, Href y)
    {
        return string.Compare(x.URL.ToString(), y.URL.ToString());
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

c# linq list distinct-values

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

继承EF代码优先

我有一个基础对象,我不希望在DB中作为一个实体映射,我只希望将属性添加到DB中映射的对象:

没有映射的对象(不知道它是否重要但是baseobject在另一个程序集中):

public class BaseObject
{
    public virtual string Prop1 { get; set; }
    public virtual string Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

映射对象:

public class ChildObject : BaseObject
{
    public virtual string Prop3 { get; set; }
    public virtual string Prop4 { get; set; }
    public virtual string Prop5 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

什么在DbContext中注册

  public DbSet<ChildObject> ChildObjects { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想在Db看到什么

table:ChildObject 
    col:Prop1 (from BaseObject)
    col:Prop2 (from BaseObject)
    col:Prop3 
    col:Prop4 
    col:Prop5
Run Code Online (Sandbox Code Playgroud)

要恢复,我想要做的是在Db中有一个具有子项和基本属性的表.

这是我目前得到的错误:

未映射类型"namespace.ChildObject".使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型.验证类型是否已定义为类,不是原始类,嵌套类还是通用类,并且不从EntityObject继承.

我一直在挖,但找不到怎么做.

有任何想法吗?

编辑: …

.net c# entity-framework fluent-interface code-first

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

如何在没有通配符的情况下使用C#泛型?

在java中,我非常习惯使用泛型和通配符.比如:List<? extends Animal>.这允许您拥有一组动物的子类型,并在每个元素上运行通用例程(例如makeNoise()).我试图在C#中实现这一点,但我有点困惑,因为没有通配符.

域名方面,我们在这里做的是使用SQL SMO库从我们的数据库中收集脚本.我们有一个基本接口类型,它扩展了很多次来编写脚本并收集不同的对象(表,视图,函数等 - 这就是T)

public interface IScripter<T> where T : IScriptable
{
    IList<T> CollectScripts(params...)
}

public abstract class AbstractScripter<T> : IScripter<T> where T : IScriptable
{
    ....
}

public class TableScripter : AbstractScripter<Table>
{
    ....
}

public class ViewScripter : AbstractScripter<View>
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.看起来像一个完全合理的对象层次结构吧?这是我打算做的,直到我发现没有通配符:

public class Program
{
    static void Main(string[] args)
    {
        // auto discover all scripter modules, table, view, etc
        IList<Iscripter<? extends IScriptable>> allScripters = GetAllScripterModules(); 
        foreach (IScripter<? extends IScriptable> …
Run Code Online (Sandbox Code Playgroud)

c# generics wildcard covariance

9
推荐指数
2
解决办法
1172
查看次数

自定义集合实现IEnumerable

我知道从技术上讲,一个接口用于读取而不是写入或编辑,但是,我想在下面的类中添加一个add和addrange函数,这是我目前所拥有的哪个不起作用

public class HrefCollection : IEnumerable<Href> 
{
    private IEnumerable<Href> hrefs;

    public IEnumerable<Href> Add( Href href )
    {
        yield return href;
    }

    public IEnumerable<Href> AddRange( List<Href> hrefs )
    {
        foreach( Href href in hrefs )
        {
            yield return href;
        }
    }

    public IEnumerator<Href> GetEnumerator()
    {
        return hrefs.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return hrefs.GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不太确定如何将收益率回报与私人清单联系起来.

谢谢你的帮助!

c# ienumerable yield interface

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

POST上的路由约束错误

在操作中操作数据时,通常会收到一个ID作为参数,但是您需要对该ID进行一些错误处理.您必须为每个操作执行的错误处理之一是确保ID高于0(不是负数).因此,我不想在动作中处理这个问题,而是想添加一个路由约束,这样如果它是一个负id,就不会路由到该动作.

这是我的代码:

//route definition
        routes.MapRoute(
            "default route" ,
            "{controller}/{action}/{id}" ,
            new { id = UrlParameter.Optional },
            new { id = @"^\d+$" }
        );

//action definition (note I also tried with only [HttpPost] and with nothing same result
        [AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get )]
        public ActionResult Edit( int id )
Run Code Online (Sandbox Code Playgroud)

当你对动作执行GET操作时,一切正常,但是当我发布POST时,我会得到以下错误,它应该只是转到404页面

 HTTP verb POST used to access path '/object/edit/-2' is not allowed.

[HttpException (0x80004005): The HTTP verb POST used to access path '/object/edit/-2' is not allowed.]
   System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-routing route-constraint

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

某些服务器变量无法从OwinContext访问

从理论上讲,OwinContext环境应该可以访问请求/响应信息以及服务器变量,尽管由于某种原因,我从OwinContext无法访问Request.ServerVariables集合中可用的一些自定义服务器变量.

造成这种差异的原因是什么?我应该如何解决这个问题?

.net iis server-variables owin katana

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

asp:标签不呈现子项

我有asp:label一个嵌套的自定义控件,它只是不呈现.我尝试注册一个类型的自定义WebControlAdapter,Label而在调试时我注意到Controls集合中显然没有控件,它似乎完全忽略了任何嵌套元素.

这是标记

<asp:Label ID="lbl13" runat="server" AssociatedControlID="txt13" Text="<%$ Resources:Resources, lbl13 %>">
    <asp:ValidationMessage ID="vm13" runat="server" MessageFor="txt13" CssClass="field-validation-error"></asp:ValidationMessage>
</asp:Label>
Run Code Online (Sandbox Code Playgroud)

知道如何绕过这个问题吗?

.net asp.net webforms web-controls

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

使用Oracle Advanced Security Options管理Oracle客户端

10月14日,Oracle发布了最新版本的Oracle Managed Client,该版本被描述为支持网络数据加密.

http://www.oracle.com/technetwork/topics/dotnet/tech-info/odac12cr4ds-2704217.pdf https://www.nuget.org/packages/Oracle.ManagedDataAccess/

虽然在尝试多种配置后出于某种原因,我们仍然无法使其工作.我们不断收到臭名昭着的ORA-12570: Network Session: Unexpected packet read error异常The provider did not return a ProviderManifestToken string.警报日志中的错误如下TNS-12599: TNS:cryptographic checksum mismatch

我们确实与DBA确认我们使用的是支持的加密算法.

此时,我唯一的其他设置如下:

  <settings>
    <setting name="SQLNET.AUTHENTICATION_SERVICES" value="NTS" />
    <setting name="NAMES.DIRECTORY_PATH" value="LDAP,tnsnames" />
  </settings>
Run Code Online (Sandbox Code Playgroud)

.net oracle odp.net entity-framework-6 oracle12c

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