考虑以下示例:
SQL 表客户:
ID: Primary Key
Name: Name
SQL 视图 ViewCustomerSelection:
ID: Link to Customer ID
SomeOption: Not important
我想创建 ADO.NET 一个仅选择在 ViewCustomerSelection 中具有相应值的客户的实体
以下不起作用:
- 创建映射到 Customer 和 ViewCustomerSelection 的实体,而不使用 ViewCustomerSelection 中的任何条件和任何字段: ViewCustomerSelection 不包含在 SQL 中,并且返回所有客户。
- 包括来自 ViewCustomerSelection 的字段:返回正确的选择,但现在 Customer 对象不可更新
- 在 SomeOption 字段上指定“非空”条件:错误 - 必须映射具有 'IsNull=false' 条件的属性 ViewCustomerSelection.SomeOption。
- 在 ViewCustomerSelection.ID 字段上指定“非空”条件:错误 - “实体类型在其主键上包含一个条件。请从映射中删除该条件。
澄清
数据库定义:
create table Customer {
ID [int] IDENTITY(1,1) NOT NULL,
Name [varchar](50) NOT NULL
} CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
create table ViewCustomerSelection
as select customer.id, ToUpper(customer.name) as SomeOption where customer.name like 'A%'
我想要具有 ID 和名称的实体 Customer,它只有 ViewCustomerSelection 中存在的记录的记录(注意 - 实际上视图更复杂,不能使用简单的条件来表达)