Недопустимое исключение свойства хранилища при попытке реализовать linq-sql в службе WCF - PullRequest
1 голос
/ 10 октября 2010

Я пытался получить службу WCF для доступа к файловой базе данных, которая хранится в локальной файловой системе, но пока безрезультатно.

Я создал базу данных с именем data.mdf в Visual Studio 2010 и запустил этот SQL-запрос.

create table Person 
   (PersonID int identity (1000,1) not null, 
    Name nvarchar(50) not null,
    Address nvarchar(max)

create table ImportantPerson
   (ImportantPersonID int indentity(1000,1) not null, 
    Name nvarchar(50) not null,
    Address nvarchar(max)

и он успешно создал нужные мне таблицы, поэтому я приступил к созданию DataContract:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace MyDataContract
{
    public class DataDB: DataContext
    {
        public Table<Person> Persons;
        public Table<Important> Importants;
        public DataDB(string connstr)
            : base(connstr)
        {
        }

    }
 [DataContract]
    [Table(Name = "Person")]
public class Person
{
 private int _ID;
private String _Name;
private String _Address
public Person()
{
}
public Person(String Name, String Address)
{
_Name = Name;
_Address = Address;
}
[DataMember]
[Column(IsPrimaryKey = true, Storage = "PersonID", DbType="int not null", IsDbGenerated = true)]
public int PersonIdentification
{
get{ return _PersonID;}
set{ _PersonID = value;}
}
[DataMember]
[Column(Storage = "Name")]
{
get{ return _Name;}
set{ _Name = value;}
}
[DataMember]
[Column(Storage = "Address")]
{
get{ return _Address;}
set{_Address= value;}
}
public class Person
{
 private int _ID;
private String _Name;
private String _Address
public ImportantPerson()
{
}

public ImportantPerson(String Name, String Address)
{
_Name = Name;
_Address = Address;
}
[DataMember]
[Column(IsPrimaryKey = true, Storage = "ImportantPersonID", DbType="int not null", IsDbGenerated = true)]
public int PersonIdentification
{
get{ return _PersonID;}
set{ _PersonID = value;}
}
[DataMember]
[Column(Storage = "Name")]
{
get{ return _Name;}
set{ _Name = value;}
}
[DataMember]
[Column(Storage = "Address")]
{
get{ return _Address;}
set{_Address= value;}
}

Когда я пытаюсь создать экземпляр подключения к базе данных

MyDataContract.DataDB data = new MyDataContract.DataDB(@"c:\data\data.mdf");

Я получаю исключение

Неверное свойство хранилища: PersonID включен член 'MyDataContract.Person.PersonIdentification'.

Может кто-нибудь помочь мне понять, что не так? Из всего, что я прочитал, это должно сработать, хотя я мог что-то пропустить.

Ответы [ 3 ]

2 голосов
/ 29 июня 2011

Член хранилища должен быть закрытым.Вам не нужен тег «Name =», если публичное имя совпадает с именем столбца.

1 голос
/ 10 октября 2010

Ладислав Мрнка прав, но это было вызвано ошибкой копирования-вставки. Я решил ее самостоятельно, поэтому, если у кого-то возникнет такая же проблема, я опубликую, как это исправить. Чтобы исправить это, мне также пришлось указать имя поля и изменить атрибут Storage следующим образом: у таблицы person есть «Name», а в объекте Person есть личная переменная экземпляра «_Name» свойство должно быть установлено как:

[DataMember]
[Column(Name="Name",Storage="_Name")]
public String Name
{ 
get{...}
set{...}
}

Также следует упомянуть, что я успешно запустил его, когда переменная intance была приватной, а свойство общедоступным.

0 голосов
/ 10 октября 2010

Мне не хватает класса ImportantPerson в вашем коде с атрибутом Table, указывающим на правильную таблицу БД, а ваш код содержит класс Person дважды.

...