我正在尝试将项目从ASP.NET MVC预览3更新到预览5,似乎已从Controller类中删除了Controller.ReadFromRequest(字符串键).有没有人知道根据表单中的标识符检索信息的任何替代方法?
我已经能够实现一个很酷的工作单元来处理实体框架.
我想出了..
public class UnitOfWork : IUnitOfWork
{
private Database _database;
private IDatabaseFactory _databaseFactory;
private DbTransaction transaction;
public UnitOfWork(IDatabaseFactory databaseFactory)
{
_databaseFactory = databaseFactory;
_database = Database;
transaction = _database.Database.Connection.BeginTransaction();
}
public Database Database
{
get { return _database ?? (_database = _databaseFactory.Get()); }
}
public void Dispose()
{
try
{
_database.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我很确定现在每个人都嫉妒这个工作单位.(开玩笑)
但是我在这个服务层有一点设计问题.
public class JournalService : IJournalService
{
IJournalRepository _journalRepository;
public JournalService(IJournalRepository journalRepository)
{
_journalRepository = journalRepository;
} …Run Code Online (Sandbox Code Playgroud) 使用EF CTP5 Code-First我试图映射一个类模型,该模型在一个指向另一个类的类中包含多个集合.这是我的意思的一个例子:
public class Company
{
public int CompanyId { get; set; }
public IList<Person> FemaleEmployees { get; set; }
public IList<Person> MaleEmployees { get; set; }
}
public class Person
{
public int PersonId { get; set; }
public Company Company { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我让数据库从这个模型创建DbContext而没有进一步的自定义,如下所示:
public class MyContext : DbContext
{
public DbSet<Company> Companies { get; set; }
public DbSet<Person> People { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...然后我在SQL Server中得到两个表,一个Companies只有一CompanyId列的简单表和一个People包含以下列的表("FKRN"表示"外键关系名称",由SQL在SQL …
.net entity-framework code-first ef-code-first entity-framework-ctp5
我有两张桌子:
RequirementId - PK
FixtureId - PK
RequirementId - FK/NULLABLE /唯一约束
夹具只能有1个要求,其他夹具不应该能够引用相同的要求.夹具不是必须具有要求,它是可选的.
我所做的是,在Sql Server中,我在Fixture表的RequirementId列上放置了一个Unique约束.如何在Entity Framework CTP 5中为此设置映射?
还可以在每个实体上使用双向导航属性吗?
public class Fixture
{
public int FixtureId { get; set; }
public Requirement Requirement { get; set; }
}
public class Requirement
{
public int RequirementId { get; set; }
public Fixture Fixture { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
也许我错了,所以任何建议都会很棒.提前致谢
entity-framework entity-framework-4 ef4-code-only ef-code-first entity-framework-ctp5
我的EF模型的一部分看起来像这样:

摘要:
现在,我正试图实现的查询:
获取有关位置ID 1234的信息,包括与这些讨论相关的任何讨论和评论.
我可以得到讨论和这样的评论:
var discussions = ctx.Posts
.OfType<Discussion>()
.Include(x => x.Comments)
.ToList();
Run Code Online (Sandbox Code Playgroud)
但我似乎无法根据位置实体上的帖子导航获取它.
我试过这个:
var locationWithDiscussionsAndComments = ctx
.Locations
.Include(x => x.Posts
.OfType<Discussion>()
.Select(y => y.Comments))
.SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
哪个编译,但我得到错误:
System.ArgumentException:包含路径表达式必须引用实体定义的属性,也可以引用嵌套属性或对Select的调用.参数名称:路径
有任何想法吗?我可能会从帖子中"倒退":
var locationWithDiscussionsAndComments = ctx
.Posts
.Include(x => x.Location)
.OfType<Discussion>()
.Include(x => x.Comments)
.Where(x => x.LocationId == 1234)
.Select(x => x.Location)
.ToList();
Run Code Online (Sandbox Code Playgroud)
但就我的存储库而言,这在毛发和语义上都是错误的(我不应该通过帖子库来获取有关位置的信息).
有任何想法吗?
编辑
因此,在对它进行更大的思考之后,我意识到这OfType<T>是一个过滤操作.据我们所知,EF不支持使用预先加载进行过滤.唯一的选择是检索所有内容,或使用匿名类型投影.
我无法检索所有内容,因为涉及的元数据太多了.所以我正在尝试匿名类型投影.
c# abstract-class eager-loading navigational-properties entity-framework-ctp5
我们使用复杂类型来管理我们的可翻译字段,如下所示:
[ComplexType]
public class Translated
{
[Required]
public string NL { get; set; }
[Required]
public string EN { get; set; }
[ScaffoldColumn(false)]
public string TranslatedText
{
get
{
return Util.Translate(NL, EN);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们要求字段存在.但在某些情况下,整个Translated字段是可选的,如:
public class Question
{
...
[Optional(ErrorMessage="Foo")]
public Translated Description { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
但是,似乎可以计算Optional属性,当它返回false时,结果不会执行任何操作.
class OptionalAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
当我将可选属性放在非复杂类型上时,它按预期工作,错误消息将始终为Foo.
最终目标是在两种情况下允许描述为空,但是当填充其中一个字段时,错误当然应该传播.
停止验证递归会导致该字段是可选的,但是如果字段被填充,它也会阻止字段的验证.
有关如何实现这一目标的任何想法?
entity-framework customvalidator entity-framework-ctp5 entity-framework-4.1
在从我的代码中插入一个像0.0001这样的浮点数到sql中,结果在数据库中是0.0000.这是我的表列的定义:
decimal(20,15)
Run Code Online (Sandbox Code Playgroud)
这是类字段的定义:
public decimal Rate {get ; set; }
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
我正在使用EF Code第一种方法:
Class1 obj = new Class1();
obj.Rate = 0.000001;
ClassDbSet.Add(obj);
DbContext.SaveChange();
Run Code Online (Sandbox Code Playgroud) 我在scottgu的博客上关于EF代码第一个CTP5的示例,但我得到了错误
System.Data.SqlClient.SqlException:无效的对象名称'dbo.Products'.
这是我得到的代码.
<add name="CTP5Context"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|EFCTP5.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
public class CTP5Context : DbContext
{
public DbSet<Product> Products { get; set; }
}
public class Product
{
public int Id { get; set; }
public string ProductName { get; set; }
public int Amount { get; set; }
}
var context = new CTP5Context();
var products = context.Products;
return View(products);
Run Code Online (Sandbox Code Playgroud)
我有点无能为力我在博客中做了同样的事情,这不是我第一次使用EF(但是CTP5 tho),我是在忽视什么?
如果我有以下课程:
public class Foo()
{
public int PropertyIWantUpdated {get; set;}
public int PropertyIDontWantUpdated (get; set}
public ICollection<Bar> Bars {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
保存到我的数据库时,而不是
context.Entry(thisFoo).State = EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)
我正在使用
context.Entry(thisFood).Property(tf => tf.PropertyIWantUpdated).IsModified = true;
Run Code Online (Sandbox Code Playgroud)
如何保存对Bars的更改?
entity-framework ef-code-first entity-framework-ctp5 entity-framework-4.1