我正在尝试使用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) 我有一个自定义集合(实现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
不考虑课堂上的任何额外属性.
无论如何将它们包含在序列化中?
这似乎是一个简单的问题,但由于某种原因,我无法在任何地方找到答案.基本上,我希望能够实现一个带NamedParameters的构造函数.
通过命名参数,我不是指具有默认值(可选参数)的参数,例如:
public SomeMethod(){
string newBar = Foo(bar2 : "customBar2");
}
public string Foo(string bar1 = "bar1", bar2 = "bar2" ){
//...
}
Run Code Online (Sandbox Code Playgroud)
什么我想实现一个很好的例子是AuthorizeAttribute从System.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
- 用户字符串
- 角色字符串
我知道在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
我得到了一个可行的解决方案,但是我非常确定资源密集度较低的方法,因为当前的解决方案包括进行查询以获取组成员,然后查询以获取每个用户的信息.
这是我的代码:
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) 如何使该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) 我有一个基础对象,我不希望在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继承.
我一直在挖,但找不到怎么做.
有任何想法吗?
编辑: …
在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) 我知道从技术上讲,一个接口用于读取而不是写入或编辑,但是,我想在下面的类中添加一个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)
我不太确定如何将收益率回报与私人清单联系起来.
谢谢你的帮助!
在操作中操作数据时,通常会收到一个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) 从理论上讲,OwinContext环境应该可以访问请求/响应信息以及服务器变量,尽管由于某种原因,我从OwinContext无法访问Request.ServerVariables
集合中可用的一些自定义服务器变量.
造成这种差异的原因是什么?我应该如何解决这个问题?
我有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)
知道如何绕过这个问题吗?
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) c# ×10
.net ×7
asp.net-mvc ×2
asp.net ×1
code-first ×1
covariance ×1
generics ×1
ienumerable ×1
iis ×1
interface ×1
json ×1
json.net ×1
katana ×1
linq ×1
list ×1
odp.net ×1
oracle ×1
oracle12c ×1
owin ×1
sqlite ×1
web-controls ×1
webforms ×1
wildcard ×1
yield ×1