Mah*_*mir 67 c# entity-framework entity-framework-4
请任何人帮我修复此错误?
指定的架构无效.错误:
CLR类型到EDM类型的映射是不明确的,因为多个CLR类型与EDM类型"City_DAL"匹配.之前发现CLR类型'CeossDAL.City_DAL',新发现的CLR类型'CeossBLL.City_DAL'.
我有DAL的主要问题,这包含EF和BLL,这包含相同的DAL类但名称空间不同,这就是导致问题的原因
我不知道怎么摆脱这些问题,能帮帮我吗?
如果有人给我示例使用带有EF的n层架构,我将不胜感激
谢谢
Lad*_*nka 76
不要使用具有相同非限定名称的类 - EF仅使用类名来标识EDMX中映射的类型(忽略名称空间) - 允许将来自不同名称空间的类映射到单个模型.您的问题的解决方案是以不同的方式命名您的BLL类.
Mat*_*att 38
解决方法:更改两个相同类之一的属性.
EF匹配类名和类属性.所以我刚刚更改了其中一个EF对象的属性名称,错误消失了.
正如@Entrodus评论其他一个答案:
只有当两个类具有相同的名称和相同的参数集时,才会发生EF冲突.
对于EF 6.x,我在https://github.com/aspnet/EntityFramework/issues/941上找到了一些注意事项,并通过在EDM类型中添加注释来解决这个问题.
我手动编辑了EDMX文件并更改了这样一行:
<EntityType Name="CartItem">
Run Code Online (Sandbox Code Playgroud)
对此:
<EntityType Name="CartItem" customannotation:ClrType="EntityModel.CartItem">
Run Code Online (Sandbox Code Playgroud)
或者使用您现有类型的其他地方:
<EntityType Name="CartItem" customannotation:ClrType="MyApp.CartItem, MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
Run Code Online (Sandbox Code Playgroud)
其中EntityModel是用于我的EF模型的命名空间,MyApp是业务对象的命名空间
在某些情况下,这比实际问题更具症状。对我来说,当我尝试在Linq查询中调用一个函数而不先调用.ToList()时,它通常会弹出。
例如,导致我出现此错误的原因是因为我这样做:
var vehicles = DB.Vehicles.Select(x => new QuickSearchResult()
{
BodyText = x.Make + " " + x.Model + "<br/>"
+ "VIN: " + x.VIN + "<br/>"
+ "Reg: " + x.RegistrationNumber +"<br/>"
+ x.AdditionalInfo
type = QuickSearchResultType.Vehicle,//HERE. Can't use an enum in an IQueryable.
UniqueId = x.VehicleID
});
Run Code Online (Sandbox Code Playgroud)
我必须调用.ToList(),然后遍历每个项目并为其分配类型。