我需要在运行时更改实体的存储架构.我已经关注了一篇很棒的帖子,可以在这里找到:http: //blogs.microsoft.co.il/blogs/idof/archive/2008/08/22/change-entity-framework-storage-db-schema-in-runtime的.aspx?CommentPosted =真#commentmessage
这非常有效,但仅适用于查询,不适用于修改.
知道为什么吗?
我正在尝试使用以下LINQ查询来对数据库(3.5 SP1)起作用:
var labelIds = new List<int> { 1, 2 };
var customersAggregatedTransactionsByType =
(from transactions in context.TransactionSet
from customers in context.CustomerSet
.Where(LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, labelIds))
from accounts in context.AccountSet
where customers == accounts.Customer
&& accounts.Id == transactions.Account.Id
&& transactions.DateTime >= fromDate && transactions.DateTime < toDate
group transactions.Amount
by new
{
UserAccountId = transactions.Account.Id,
TransactionTypeId = transactions.TransactionTypeId,
BaseAssetId = accounts.BaseAssetId
} into customerTransactions
select customerTransactions).ToList();
Run Code Online (Sandbox Code Playgroud)
一旦我添加,Where(LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, labelIds))
我得到以下异常:
System.InvalidOperationException:内部.NET Framework数据提供程序错误1025.
如果我删除Where(LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, …
我们正在构建一个客户端是ASP .Net MVC的平台,使用ASP Net Identity 2.0进行身份验证和授权(使用声明),这在网络端非常有用.
我们还有一个WCF服务,允许对数据库(对于多个客户端应用程序)进行CRUD操作,该服务从这个ASP .Net MVC客户端获取请求.由于我们希望在WCF端进行特定CRUD操作之前验证(验证和授权)用户,因此我们需要从客户端获取用户的声明,并执行验证(最好使用标头或任何非常干净的方式)绑定,WCF将能够支持此事项).
我一直在搜索不同的论坛,但没有简单的答案\教程这个特定的场景.谁能协助解决这个问题?
谢谢,Nir.
asp.net-mvc wcf wcf-security claims-based-identity asp.net-identity
我正在尝试使用以下方法构建一个通用方法来处理MongoDB C#驱动程序的所有部分更新:
public bool UpdateObject<T>(UpdatableObject<T> updatableObject)
where T : new()
{
var builder = GenerateMongoUpdateBuilder(updatableObject.ModifiedFields);
var collection = GetCollection<T>();
var result = collection.Update(Query.EQ("_id", BsonValue.Create(updatableObject.Id)), builder, new MongoUpdateOptions { Flags = UpdateFlags.Multi });
return result.UpdatedExisting;
}
private static UpdateBuilder GenerateMongoUpdateBuilder(Dictionary<string, object> modifiedFields)
{
var builder = new UpdateBuilder();
foreach (var modifiedField in modifiedFields)
{
var type = modifiedField.Value.GetType();
if (type.IsPrimitive || type.IsValueType || (type == typeof(string)))
{
builder.Set(modifiedField.Key, BsonValue.Create(modifiedField.Value));
}
else
{
builder.Set(modifiedField.Key, modifiedField.Value.ToBsonDocument());
}
}
return builder;
}
Run Code Online (Sandbox Code Playgroud)
我不得不挣扎一段时间,直到我找到解决方案通过BsonValue处理原始类型和通过BsonDocument处理非原始类型.一切都运作良好,直到...我们创建了一个包含字典的对象.插入工作完美,但一旦进入更新(使用此方法) - …
我正在尝试克服WCF和枚举的问题,我正在尝试将对象从服务器传递到包含枚举的客户端(或其他服务器).枚举以1开头,故意.枚举初始化时以及在其中定义值时,一切都很顺利,但是当它未在枚举中定义时,我得到了这个非常好的(并且非常具有描述性(...))错误消息:
"底层连接已关闭:连接意外关闭."
我试图实现的是当我得到这个场景时,无论是从数据库中的损坏数据(无论如何都被转换为枚举,这是非常奇怪的),或者当开发人员忘记在启动对象时设置枚举值时,要获得有意义的消息,例如"枚举值无效,请键入:{0},值:{1}".
我试图在类的枚举和getter中使用"Enum.IsDefined",并将有意义的异常抛给客户端(或其他服务器),但仍然出现"连接关闭"错误(当允许调试服务器我得到了有意义的消息,但仅在服务器端).
这是enum setter和getter的片段:
private TestEnum m_TestEnum;
[DataMember]
public TestEnum TestEnum
{
get
{
if (Enum.IsDefined(typeof(TestEnum), m_TestEnum))
{
return m_TestEnum;
}
else
{
throw new ApplicationException("Enum value is not valid: " + m_TestEnum);
}
}
set
{
if (Enum.IsDefined(typeof(TestEnum), value))
{
m_TestEnum = value;
}
else
{
throw new ApplicationException("Enum value is not valid: " + value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
从0开始枚举(带有"未知"值)不够好,因为我仍然可以获得枚举中不存在的值.我可以结合两种解决方案,我检查"IsDefined"并将枚举设置为"未知"值,但仍然 - 这不是理想的解决方案,因为我们想知道这些情况,以便在开发周期中解决它们.
你说什么?谢谢,Nir.
wcf ×2
.net ×1
asp.net-mvc ×1
c# ×1
dictionary ×1
enums ×1
internal ×1
mongodb ×1
partial ×1
runtime ×1
schema ×1
wcf-security ×1