我正在初始化实体框架对象上下文,这给了我关键字不支持错误:
metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework"
我直接从web.config中获取了连接字符串,并且只修改了文件的路径(我动态设置),而不是使用默认值,显式使用了这个连接字符串.什么可能导致此错误?
基本上我在我的EF数据库中有一个表,它具有以下属性:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)
它工作正常但是当我将Rating的int更改为double时,我在更新数据库时遇到以下错误:
对象'DF_ Movies _Rating__48CFD27E'取决于列'评级'.ALTER TABLE ALTER COLUMN评级失败,因为一个或多个对象访问此列.
有什么问题?
我在下面的查询中收到此错误
无法创建类型的常量值
API.Models.PersonProtocol.在此上下文中仅支持基元类型或枚举类型
ppCombined下面是一个IEnumerable对象PersonProtocolType,由2个PersonProtocol列表的concat构成.
为什么这会失败?我们不能使用LINQ JOIN条款里面SELECT的JOIN?
var persons = db.Favorites
.Where(x => x.userId == userId)
.Join(db.Person, x => x.personId, y => y.personId, (x, y) =>
new PersonDTO
{
personId = y.personId,
addressId = y.addressId,
favoriteId = x.favoriteId,
personProtocol = (ICollection<PersonProtocol>) ppCombined
.Where(a => a.personId == x.personId)
.Select( b => new PersonProtocol()
{
personProtocolId = b.personProtocolId,
activateDt = b.activateDt,
personId = b.personId
})
});
Run Code Online (Sandbox Code Playgroud) 我有这个问题:
int maxShoeSize = Workers
.Where(x => x.CompanyId == 8)
.Max(x => x.ShoeSize);
Run Code Online (Sandbox Code Playgroud)
maxShoeSize如果公司8根本没有工人,那将会是什么?
更新:
如何更改查询以获得0而不是异常?
好的,我有三层实体,具有以下层次结构:课程 - >模块 - >章节
这是最初的EF LINQ声明:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters))
.Single(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)
现在,我想要包含另一个名为Lab的实体,该实体与课程相关联.
如何包含实验室实体?
我尝试了以下但它不起作用:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
.Single(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)
关于包含第二实体的任何想法?
任何建议或信息都将受到高度赞赏.谢谢!
我的数据库中有一个名为SEntries的表(参见下面的CREATE TABLE语句).它有一个主键,几个外键,没有什么特别之处.我的数据库中有许多类似于那个表,但由于某种原因,该表最终在EF代理类上有一个"Discriminator"列.
这是在C#中声明类的方式:
public class SEntry
{
public long SEntryId { get; set; }
public long OriginatorId { get; set; }
public DateTime DatePosted { get; set; }
public string Message { get; set; }
public byte DataEntrySource { get; set; }
public string SourceLink { get; set; }
public int SourceAppId { get; set; }
public int? LocationId { get; set; }
public long? ActivityId { get; set; }
public short OriginatorObjectTypeId { get; set; }
}
public class …Run Code Online (Sandbox Code Playgroud) 我是ASP.NET MVC(3)的新手,并且很难解决Visual Studio中的构建错误:
找不到类型或命名空间名称'DbContext'(您是否缺少using指令或程序集引用?)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
namespace MyProjectName.Models
{
public class MachineModel
{
// name
[Required]
[Display(Name = "Nom de la machine")]
public string Name { get; set; }
// IP
[Required]
[RegularExpression(@"(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",
ErrorMessage = "Donnez une adresse IPv4 valide.")]
[Display(Name = "Adresse IP de la machine")]
public string IP { get; set; }
}
public class MachineDbContext : DbContext
{
public DbSet<MachineModel> Machines{ get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的两个错误是: …
asp.net-mvc entity-framework visual-studio-2010 visual-studio asp.net-mvc-3
在此查询中:
public static IEnumerable<IServerOnlineCharacter> GetUpdated()
{
var context = DataContext.GetDataContext();
return context.ServerOnlineCharacters
.OrderBy(p => p.ServerStatus.ServerDateTime)
.GroupBy(p => p.RawName)
.Select(p => p.Last());
}
Run Code Online (Sandbox Code Playgroud)
我不得不把它切换到这个才能工作
public static IEnumerable<IServerOnlineCharacter> GetUpdated()
{
var context = DataContext.GetDataContext();
return context.ServerOnlineCharacters
.OrderByDescending(p => p.ServerStatus.ServerDateTime)
.GroupBy(p => p.RawName)
.Select(p => p.FirstOrDefault());
}
Run Code Online (Sandbox Code Playgroud)
我甚p.First()至无法使用镜像第一个查询.
为什么在这样一个强大的ORM系统中存在这样的基本限制?
您可以使用以下两种方法从EF中删除数据库中的项目.
第一个是EntityCollection第二个,第二个是ObjectContext.
什么时候应该使用?
一个优先于另一个吗?
Remove()返回a bool并DeleteObject()返回void.
我(重新)设计大规模应用程序,我们使用基于DDD的多层架构.
我们有MVC与数据层(存储库的实现),域层(域模型的定义和接口 - 存储库,服务,工作单元),服务层(服务的实现).到目前为止,我们使用跨所有层的域模型(主要是实体),并且我们仅将DTO用作视图模型(在控制器中,服务返回域模型,并且控制器创建视图模型,其被传递到视图).
我读过很多关于使用,而不是使用,映射和传递DTO的文章.我知道没有任何确定的答案,但我不确定是否可以将域模型从服务返回到控制器.如果我返回域模型,它仍然永远不会传递给视图,因为控制器总是创建特定于视图的视图模型 - 在这种情况下,它似乎是合法的.另一方面,当域模型离开业务层(服务层)时感觉不对.有时服务需要返回域中未定义的数据对象,然后我们要么必须将新对象添加到未映射的域,要么创建POCO对象(这很丑陋,因为有些服务返回域模型,有些有效地返回DTO).
问题是 - 如果我们严格使用视图模型,是否可以将域模型一直返回到控制器,或者我们是否应该始终使用DTO与服务层进行通信?如果是这样,根据需要的服务调整域模型是否可以?(坦率地说,我不这么认为,因为服务应该消耗域名所具有的.)如果我们应该严格遵守DTO,它们应该在服务层中定义吗?(我想是的.)有时很明显我们应该使用DTO(例如,当服务执行大量业务逻辑并创建新对象时),有时很明显我们应该只使用域模型(例如,当成员服务返回贫血用户时( s) - 创建与域模型相同的DTO似乎没有多大意义) - 但我更喜欢一致性和良好实践.
Article Domain vs DTO vs ViewModel - 如何以及何时使用它们?(以及其他一些文章)与我的问题非常相似,但它没有回答这个问题.文章我应该用EF在存储库模式中实现DTO吗?也是类似的,但它不涉及DDD.
免责声明:我不打算只使用任何设计模式,因为它存在且很花哨,另一方面,我也想使用良好的设计模式和实践,因为它有助于设计整个应用程序,有助于分离至少在目前,即使是使用特定模式进行处理也不是"必要的".
一如既往,谢谢.
architecture asp.net-mvc domain-driven-design entity-framework
entity-framework ×10
c# ×4
linq ×3
.net ×2
asp.net-mvc ×2
database ×2
orm ×2
architecture ×1
join ×1
lambda ×1
sql ×1
sql-server ×1